折半插入排序
来源:互联网 发布:软件测试技术pdf 编辑:程序博客网 时间:2024/06/05 21:16
这个是在上一篇插入排序的基础上的改进。在查找第i个元素的正确位置的过程中,使用折半查找加速。数据量大的情况下效率应该有比较显著的提升。
//折半插入排序//lovesunmoonlight//2017.3.24 #include<iostream>#include<cmath>#include<cstdlib>using namespace std;#define MAX 10typedef struct{int key; //关键字 double data; //数据 }node;typedef struct{node r[MAX+1]; //r[0]的位置设置为哨兵int len; }List;void binaryInsertSort(List& s){for(int i=2;i<s.len;i++){s.r[0]=s.r[i]; //保存到哨兵int low=1;int high=i-1;int mid=low+(high-low)/2;while(low<=high){if(s.r[0].key<s.r[mid].key){high=mid-1;}else{low=mid+1; }mid=low+(high-low)/2;}int j;for(j=i-1;j>=high+1;j--){s.r[j+1]=s.r[j];}s.r[high+1]=s.r[0];}}void output(const List& s){cout<<"Key Data"<<endl;for(int i=1;i<s.len;i++)cout<<s.r[i].key<<" "<<s.r[i].data<<endl;cout<<endl;}int main(){List s;//初始化表 s.len=MAX+1;s.r[0].key=0;s.r[0].data=-1;for(int i=1;i<s.len;i++){s.r[i].data=rand()%100;s.r[i].key=rand()%50;}cout<<"Initialized: "<<endl;output(s);binaryInsertSort(s);cout<<"After binaryInsertSort: "<<endl;output(s); return 0;}结果:
0 0
- 插入排序--折半插入
- 插入排序--折半插入
- 排序:折半插入排序
- 排序--折半插入排序
- 排序-折半插入排序
- 【插入排序】折半插入排序
- 插入排序--折半插入排序
- 折半插入排序,插入排序
- 折半插入排序
- 折半插入排序
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序 练习
- 折半插入排序
- 折半插入排序
- 折半插入排序
- 折半插入排序 Java
- 折半插入排序算法
- node.js——麻将算法(二)赖子玩法
- jQuery-笔记
- Android消息传递之EventBus 3.0使用详解
- 题目:利用opencv对一副图像进行腐蚀操作
- A20启动代码流程分析
- 折半插入排序
- 如何在Mac下编译C++文件为可执行文件
- Ubuntu 15.04 安装 boost-python
- 不使用composer安装yii高级版本的方法
- Android 获取assets的绝对路径
- Illegal character in scheme name at index 0
- 遇到Error: Flash Download failed
- 数据交互-笔记
- Longest Common Prefix