直接插入排序是一種比較簡單的排序方法,它的基本操做是:假設排序的記錄存儲在數組C[1..n]中,在排序過程的某個時刻,C被劃分爲兩個子區間,C[1..i-1]和C[i..n],其中前一個爲已排好的有序區,然後一個爲無序區,開始時有序區中只含有一個元素C[1],無序區中爲C[2..n]。排序過程當中,只須要每次從無序區中取出第一個元素,把它插入到有序區的適當位置,使之成爲新的有序區,依次這樣通過n-1次插入後,無序區爲空,有序區包含了所有n個元素,至此排序完畢.用一個C示例說明以下數組
#include <stdio.h> #include <stdlib.h> /*直接插入排序練習*/ /*先定義一個無序數組*/ void InsertSort(int * c,int len); void Show(int * c,int len); int main(void){ int zm[8]={2,5,30,6,11,13,16,15}; int length=sizeof(zm)/sizeof(zm[0]); // printf("數組的長度是%d\n",length); InsertSort(zm,length); Show(zm,length); return 0; } void InsertSort(int * c,int len){ //插入排序 int i,j,temp; for(i=1;i<len;i++){ temp = c[i]; //當前記錄先保存下 j=i-1; while(temp<c[j] && j>=0){ //找插入位置 c[j+1]=c[j]; //記錄後移 j--; } c[j+1]=temp; //c[i]插入到正確位置 } } void Show(int * c,int len){ int i; printf("新的數組是:\n"); for(i=0;i<len;i++){ printf("%d,",c[i]); } }
程序執行結果以下:ide