排序之直接插入排序
2012-12-26 12:48
148 查看
直接插入排序(straight insertion sort)的作法是:
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
具体步骤如下:
初始序列:
i=1 [46] 58 15 45 90 18 10 62
↓
i=2 [46 58] 15 45 90 18 10 62
┌——┘
↓
i=3 [15 46 58] 45 90 18 10 62
┌——┘
↓
i=4 [15 45 46 58] 90 18 10 62
↓
i=5 [15 45 46 58 90] 18 10 62
┌—————┘
↓
i=6 [15 18 45 46 58 90] 10 62
┌————————┘
↓
i=7 [10 15 18 45 46 58 90] 62
┌—┘
↓
i=8 [10 15 18 45 46 58 62 90]
C语言代码如下:
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
具体步骤如下:
初始序列:
i=1 [46] 58 15 45 90 18 10 62
↓
i=2 [46 58] 15 45 90 18 10 62
┌——┘
↓
i=3 [15 46 58] 45 90 18 10 62
┌——┘
↓
i=4 [15 45 46 58] 90 18 10 62
↓
i=5 [15 45 46 58 90] 18 10 62
┌—————┘
↓
i=6 [15 18 45 46 58 90] 10 62
┌————————┘
↓
i=7 [10 15 18 45 46 58 90] 62
┌—┘
↓
i=8 [10 15 18 45 46 58 62 90]
C语言代码如下:
#include <stdio.h> //打印数组 void display(int array[],int size){ printf("the array is:"); int i; for(i=0;i<size;i++){ printf("%d ",array[i]); } printf("\n"); } //直接插入排序函数 void sort(int array[],int size){ int i,j,temp; //从数组的第2个数开始 for(i=1;i<size;i++){ //从无序数列中取出一个数,默认是无序数列的第一个 temp = array[i]; //从有序数列的最后一个数开始 for(j=i-1;j>=0;j--){ //如果有序数列的数比无序数列的数的大,则将有序数列往后移一个位置 if(array[j] > temp){ array[j+1] = array[j]; }else{ //如果找到无序数列的数在有序数列中的位置。 break; } } //最后将该无序数列放入到有序数列中 array[j+1] = temp; display(array,size); } } int main(void){ int array[10]={34,45,1,39,21,68,65,100,4,51}; display(array,10); //直接插入排序函数 sort(array,10); return 0; }