详细见这篇博客:http://www.cnblogs.com/skywang12345/p/3596881.html
直接插入排序介绍
直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
总结:三个for循环(完全个直接插入排序一模一样的思路,一个for循环找到直接插入的位置,一个for循环后移)
自己完成的完整代码:
#include"stdio.h" /* * 直接插入排序 * 2015-08-10:May * 参数说明: * a -- 待排序的数组 * n -- 数组的长度 */ void insert_sort(int a[], int n) { int i, j, k; for(i=1;i<n;i++) { for(j=i-1;j>=0;j--) { if(a[i]>a[j]) { break;//找到位置了,找到大于某个位置的地方就停下 } } if(j!=i-1) // 找到位置了开始将位置后面的往后移,如果恰好就不用移动 { int temp=a[i];//先将要插入的存起来,会被覆盖 for(k=i-1;k>j;k--) { a[k+1]=a[k]; //都往后移动 } a[j+1]=temp; //插入进来; } } } void main(void) { int a[]={5,8,3,1,12,1}; insert_sort(a,6); for(int k=0;k<6;k++) { printf("%d ",a[k]); } }