算法步骤:
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,则该元素移到下一个位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
6.重复步骤2~5
实例:
#include <stdio.h>
void insertsort(int *data, int size){
int i, j;
int tmp;
for (i = 1; i<size; i++){
tmp = *(data + i);
for (j = i; j>0 && *(data + j - 1)>tmp; j--)
*(data + j) = *(data + j - 1);
*(data + j) = tmp;
}
}
void displayoutcome(int *data, int size){
int i;
for (i = 0; i<size; i++)
printf("%d ", *(data + i));
printf("\n");
}
int main(){
/*
时间复杂度:O(n^2)
空间复杂度:O(1)
思路:从第二个元素开始,不断前移。针对数据量比较小时可用。
*/
int data[] = { 60, 2, 97, 78, 0, 84, 68, 23, 48, 22, 63, 31, 43, 42, 82, 9,
57, 21, 42, 62, 83, 98, 64, 72, 96, 31, 76, 13, 70, 49, 10, 60, 72, 36,
26, 4, 56, 54, 13, 9, 98, 45, 61, 90, 88, 80, 30, 50, 77, 83, };
int size = sizeof(data) / sizeof(int);
insertsort(data, size);
displayoutcome(data, size);
getchar();
return 0;
}
结果:
参考网址