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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM