C语言——直接插入排序

来源:互联网 发布:网络上赌博输钱怎么办 编辑:程序博客网 时间:2024/05/17 01:37

什么是直接插入排序?

 直接插入排序即是在要排序的数组中,假设前n-1(n>=2)个数已经是排好序的,现在要把第n个数插入到前n个已经排好序的数组中,使得这n个数也

变成有序的,如此反复循环,使得要排序的数组中的最后一个元素也排好序,

        我们可以先假设第一个数是排好序的,然后第二个数和第一个数进行比较,如果第二个数比第一个数大,那么说明前两个数排好序,无需做调整,如果

第二个数比第一个数小,那么就把第一个数向后移,将第二个数放在第一个数的位置上,抽象出来就是用a[i]和a[i-1]进行比较,如果a[i]>a[i-1],那么就说明

前i个数是已经排好序的,如果a[i]<a[i-1],就让j=i-1,temp=a[i],然后一边将数据a[j]向后移动,一边向前搜索,直到找到a[j]<a[i]时停止,并将temp放到a[j+1]处

即可。

代码如下:

  1 #include <stdio.h>  2   3   4 InsertSort(int array[], int num)  5 {  6         int i = 0;  7         int temp = 0;  8         int j = 0;  9  10  11  12         for(i=1; i<num; i++) 13         { 14                 temp = array[i];        //将每次要排序的元素保存到temp中 15                 j= i-1; 16  17                 while( j>=0 && (temp<array[j]) ) 18                 { 19                         array[j+1] = array[j];   20                         j--;                    //将比temp小的元素依次向后移动一个位置 21                 }        22                  23                 array[j+1] = temp;              //空出来的元素就是temp要插入的位置        1 24         }        25 }        26  27 void main() 28 { 29         int a[]={11,21,9,32,8,1,6,3,4,7,}; 30         int len = sizeof(a) / sizeof(a[0]); 31         int i; 32          33         InsertSort(a,len); 34          35         for(i=0; i<len; i++) 36         { 37          38                 printf("%3d",a[i]); 39         }        40         printf("\n"); 41          42 }


运行结果如下:

[lalala@jjjjj ~]$ ./a.out old a[]= 11 21  9 32  8  1  6  3  4  7new a[]=  1  3  4  6  7  8  9 11 21 32

yo peace

原创粉丝点击