码迷,mamicode.com
首页 > 编程语言 > 详细

C语言实现折半插入算法

时间:2018-11-02 20:24:26      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:依次   就是   array   printf   for   color   结束   temp   style   

 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 }

 

C语言实现折半插入算法

标签:依次   就是   array   printf   for   color   结束   temp   style   

原文地址:https://www.cnblogs.com/tendo/p/9897931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!