您的位置:首页 > 其它

直接插入排序

2017-04-25 23:10 211 查看
直接插入排序是插入排序的一种。记录Array[0..i-1]已经有序,将待排序记录Array[i]插入到上述序列中的适当位置,使新序列也有序。

#include<stdio.h>
#include<stdlib.h>

void InsertSort(int *array, int n) {
int i, j, temp;
for (i = 1; i < n; i++) {
if (*(array + i) < *(array + i - 1)) {
temp = *(array + i);
j = i - 1;
do {
*(array + j + 1) = *(array + j);
j--;
} while (temp < *(array + j));
*(array + j + 1) = temp;
}
}
}

void main() {
int i;
int array[10] = { 12,3,5,34,7,23,42,81,96,47 };
printf("待排序的数组为:");
for (i = 0; i < 10; i++)
printf("%d ", *(array + i));
getchar();
InsertSort(array, 10);
printf("\n直接插入排序后的数组:");
for (i = 0; i < 10; i++)
printf("%d ", *(array + i));
printf("\n\n");
}


时间复杂度:直接插入排序时所需进行的关键字的比较次数和移动次数约为n^2/4,时间复杂度为O(n^2)。

空间复杂度:就地排序,空间复杂度为O(1)。

稳定性:稳定。

改进:从减少比较和移动次数出发考虑,对半插入法和2-路插入法。对半插入法,即在插入第i个元素时不是顺序寻找插入位置,而是采用对半的方法,若记录是用数组存储的,对半插入排序法可以减少关键字的比较次数,但记录的移动次数不变,而对于链式存储方式不能使用对半的方法寻找插入位置。直接插入排序的另一种改进方法是希尔排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序