记录一笔-折半插入排序

来源:互联网 发布:nike高仿淘宝 编辑:程序博客网 时间:2024/05/09 03:42

与直接插入相比减少了比较次数 复杂度不变 n2

主要步骤:

1.找到要插入的位置

2.插入数据(设计到元素的移动)


在其它地方找到这个图例方面理解



#include <stdio.h>void binaryInsertSort(int *,int);void showArray(int * array,int len);void main(){int len = 12;int array[12] = { 5, 3, 6, 2, 1, 9, 4, 8, 7,-20,-100,33};  printf("排序前:");showArray(array,len);binaryInsertSort(array, len);printf("排序后:");showArray(array,len);}//输出数组信息void showArray(int * array,int len){int i;for(i=0 ; i<len; i++){printf("%d ",array[i]);}printf("\n");}//折半插入排序void binaryInsertSort(int * array,int len){int i=1;int j;for(;i<len; i++){if(array[i] < array[i-1])//如果 第i个元素小于前一个元素{//缓存第i个元素 【待插入的数据】int temp = array[i];//记录搜索范围边界int low = 0;int high = i - 1; // 0  到 high 是 array[i] 前面的所有元素while(low<=high){//记录中间位置int mid = (low + high) / 2;//比较中间元素和当前第i个元素的大小 ,以此来再次缩小比较范围if(array[mid]>temp)// i mid{high= mid - 1;}else{low = mid + 1;  }}//执行到此处 说明已找到元素要插入的位置[low或者 high+1] 将low 到 i 处数据整体向后移动1位for(j= i ;j>low; j--){array[j] = array[j-1];}array[low]=temp;}}}


0 0
原创粉丝点击