直接插入排序
思想:
当插入第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;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。