1. 程式人生 > >C語言實現折半插入演算法

C語言實現折半插入演算法

 1 #include <stdio.h>
 2 int BInsertSort(int array[],int left,int right){  //接收主函式呼叫語句中的實參傳到這裡的形參裡
 3     int low,high,mid;
 4     int temp;
 5     for(int i=left+1;i<=right;++i){
 6         temp=array[i];  //把第2個數(也就是下標1位置的數)存到temp臨時變數裡,即從第2個數開始往後的序列依次按照折半插入插入到第一個數的數列裡(預設第一個數作為一個有序序列)
 7         low=left;  //
將待插入的關鍵字要想插入到已經有序的序列中,需要找到插入位置,從此句往下為在有序序列中查詢插入位置 8 high=i-1; //在有序序列中設定左右下標變數low和high 9 while(low<=high){ //當low和high交換位置時結束查詢 10 mid=(low+high)/2; 11 if(array[i]<array[mid]) /*此while迴圈為折半查詢演算法*/ 12 high=mid-1; 13 else //
如果待插入關鍵字大於或等於下標為mid處的關鍵字,都是在mid處後面進行插入 14 low=mid+1; 15 } 16 for(int j=i-1;j>=low;--j) //把從low號位置及其後的關鍵字全部後移一個位置,把待插入的關鍵字放在low號位置 17 array[j+1]=array[j]; 18 array[low]=temp; 19 } 20 return 0; 21 } 22 int main(){ 23 int a[6]={10,9,3,5,4
,2}; 24 printf("排序前序列:"); 25 for(int i=0;i<6;++i) 26 printf("%d\t",a[i]); 27 printf("\n"); 28 BInsertSort(a,0,5); //呼叫BInsertSort函式,把待排序陣列a,左下標0,右下標5傳到形參 29 printf("排序後序列:"); 30 for(int j=0;j<6;++j) 31 printf("%d\t",a[j]); 32 printf("\n"); 33 return 0; 34 }