记录一笔-折半插入排序
来源:互联网 发布: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
- 记录一笔-折半插入排序
- 记录一笔-直接插入排序
- 记录一笔-快速排序
- 记录一笔-冒泡排序
- 插入排序--折半插入
- 插入排序--折半插入
- 排序:折半插入排序
- 排序--折半插入排序
- 排序-折半插入排序
- 【插入排序】折半插入排序
- 插入排序--折半插入排序
- 折半插入排序,插入排序
- 折半插入排序
- 折半插入排序
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序 练习
- 折半插入排序
- 规范之路 -line-height 的工作原理
- Vijos P1037 搭建双塔(动态规划,二维背包)
- findContours和drawContours的使用
- uva 11988Broken Keyboard (a.k.a. Beiju Text)
- 让你的Google跑起来
- 记录一笔-折半插入排序
- rac ntp配置
- 两个队列实现栈
- noj 2107 有趣的区间异或值(异或,找规律)
- NYOJ 5 Binary String Matching【string find的运用】
- 一些项目中遇到的小问题
- service的简单通信③
- C++ 虚继承
- CSU 1779 NBUT 1641 “错误的算法”(这是题目名)