问了问身边的同事,告诉我插入排序还分两种,直接插入排序和拆半插入排序。害的我还把标题改了。回头看看拆半插入排序吧。先弄弄直接插入排序是怎么回事!
算法原理
假定一个数组的排序是排好的,然后遍历数组,当发现其中一个数比这个数大(小)则位置空出来,后面的数列向后移动,最后将这个数插入到空出来的位置上。
描述
从上面的原理上来理解,首先数组的排序是排好的
- 从第一个元素开始,该元素是排序好了的
- 取出下一个元素保存临时变量中,在已排序的数组中从后向前扫描然后对比这个数大(小)
- 临时变量中的元素大(小)于数组中的一个数则空出来,后面的数组向后移动
- 将临时变量中的元素插入到空出来的数组中
- 重复2直到结束
实现
代码:
#include <stdio.h>
void insert_sort(int *, int);
int main(void)
{
int i, array[10] = {5,4,6,23,78,213,54,2,7689,34};
insert_sort(array, 10);
i = 0;
while(i < 10)
printf("%d\n",array[i++]);
return 0;
}
void insert_sort(int *array, int len)
{
int i, j, tmp;
for(i=1; i<len; i++){
tmp = array[i];
for(j=i-1;j>=0;j--){
if(array[j] < tmp){
array[j+1] = array[j];
}else{
break;
}
}
array[j+1] = tmp;
}
}
结果: