zoukankan      html  css  js  c++  java
  • 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	",a[i]);
    27     printf("
    ");
    28     BInsertSort(a,0,5);   //调用BInsertSort函数,把待排序数组a,左下标0,右下标5传到形参
    29     printf("排序后序列:");
    30     for(int j=0;j<6;++j)
    31         printf("%d	",a[j]);
    32     printf("
    ");
    33     return 0;
    34 }
  • 相关阅读:
    RabbitMQ学习笔记
    Eclipse下JRebel的安装和基本使用
    通过HTTP响应头让浏览器自动刷新
    CentOS6.5安装Jenkins
    Windows快捷操作技巧
    关于代码压缩混淆加密整理;
    一款优雅的小程序拖拽排序组件实现
    记一次 Mac CA证书 问题
    微信小程序-Swiper和下拉刷新组件
    WeUI Picker组件 源代码分析
  • 原文地址:https://www.cnblogs.com/tendo/p/9897931.html
Copyright © 2011-2022 走看看