对于算法估计很多人想学习,但是又怕学不好,就像我一样。。。没有办法啊,逼着自己来吧,谁让我们是爷们来。
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5
,给大家找的一个很给力的图片来整体感觉一下:
编写一个代码来测试一下:(vc6.0)
- #include <stdio.h>
- void insertion_sort(int array[],int first,int last)
- {
- int i,j;
- int temp;
- for (i = first+1; i<=last;i++)
- {
- temp = array[i];
- j=i-1;
- //与已排序的数逐一比较,大于temp时,该数移后
- while((j>=first) && (array[j] > temp))
- {
- array[j+1] = array[j];
- j--;
- }
- array[j+1] = temp;
- }
- }
- display(int *array,int num)
- {
- while(num--)
- printf("%d ",*array++);
- }
- int main()
- {
- int array[]={7,3,4,9,0,7,12,2,3,7,5,1,2,9};
- insertion_sort(array,0,6);
- display(array,sizeof(array)/4);
- return 0;
- }
运行解雇: