直接插入排序

思想:

当插入第i个元素时,前面的i-1个元素已经排好序,这时,用第i个元素和前面的i-1个元素进行比较,找到第i个元素的位置将其插入,原来位置上的元素向后顺移。

例子:

初始序列:       21 25 49 25* 16 8

1               21 25 49 25* 16 8

2               21 25 49 25* 16 8

3               21 25 25* 49 16 8

4               16 21 25 25* 49 8

5               8 16 21 25 25* 49
i=4时直接插入排序的过程:
初始: 21 25 25* 49 16 8    temp

    21 25 25* 49  16 8      16

    21 25 25* 49 49 8       16

    21 25 25* 25* 49 8      16

    21 25 25 25* 49 8       16

    21 21 25 25* 49 8       16

    16 21 25 25* 49 8       16

在这趟排序中,我们可以看到V[0]到V[3]已经排好序了,在要插入V[4]=16这个数时,我们需要比较V[4]与V[3],因为V[4]<V[3],需要在V[3]到V[0]之间寻找插入位置,先将V[4]=16找一个工作元素temp中暂存,以防止前面的元素把他覆盖掉。然后从后面向前依次比较寻找插入位置,循环变量设为j,如果V[j]>temp,那么就将V[j]后移,直到某一个V[j]<=temp时或者元素序列比较完为止。最后把暂存的temp的值填到第j个位置的后一个位置,一趟排序就结束了。

稳定性:稳定

时间复杂度:O(n^2)

代码:

c++:

void Insert\_sort(int arr\[\],int n) {

 int i;

 int j;

 int temp;

 for (i = 1; i < n;i++) {

 temp = arr\[i\];

 for (j = i - 1; j >= 0;j--) {

 if (temp<arr\[j\]) {

 arr\[j + 1\] = arr\[j\];//后移比temp大的值

 }

 else

 {

 break;//不需要移动

 }

 }

 arr\[j + 1\] = temp;

 }

}

夜雨声烦
7 声望1 粉丝

一个菜鸟,主要记录一下自己复习的东西


下一篇 »
快速排序