DSA——直接插入排序笔记

不需要额外申请空间,从数组的第二个元素即 a[1]开始,将其设为key

用key依次从后【key的前一个元素】比较,当key比当前值小时候,把当前值到Key原位置之间的元素依次向后移动一个单元。

key>=当前值以后,把key复制给当前值后面的值即可。

*保证了Key值之前的所有元素都是sorted的。

void InsertSort(int a[], int n)
{
	int i, j, key;
	for (i = 1; i < n; i++)
	{
		j = i - 1;
		key = a[i];
		while (j >= 0 && key<a[j])
		{
			a[j + 1] = a[j];
			j--;
		}
		a[j + 1] = key;
	}
}

空间复杂度O(1);

时间复杂度:

    最好:数组为正序排序,只需要执行for循环,因为key>a[j],直接执行a[j+1]=key即可——O(n)

    最坏:逆序,for+while=O(n^2)

平均就是O(n^2)【对于随机排序的数组,移动和比较次数更接近最坏情况】

稳定:

key<a[j]保证了稳定性


//0305复习,有点蒙来着
1、忘记设置key
2、寻找j--的时候以及向后移动的时候用了两个循环竟然。。一个就完全可以做到,可以边寻找边移动
因为没写明白所以时间复杂度也没分析对。。

//0314复习。基本语句可以写出来,0305出现的问题2也记得了,可惜1 依然忘记设置key.会被覆盖的呀

posted @ 2017-02-28 08:50  Nicolellu  阅读(157)  评论(0)    收藏  举报