C++实现折半插入排序
来源:互联网 发布:回归分析对数据的要求 编辑:程序博客网 时间:2024/06/07 14:51
在“C++实现直接插入排序”中,由于插入排序的基本操作是在一个有序表中进行查找和插入,则这个“查找”操作可以利用“折半查找”来实现,由此进行的插入排序称之为折半插入排序
实现如下:
#include<iostream>using namespace std;#define SIZE_A 9int main(){void myshow(int* p,int length);//函数提前声明int list[SIZE_A]={-1,49,38,65,97,76,13,27,49};cout<<"排序前:"<<endl;myshow(list,SIZE_A);//折半插入排序,位置【0】辅助空间,真正要排序的数据在位置【1】~【length-1】for(int i=2;i<sizeof(list)/sizeof(int);i++){list[0]=list[i];//将待插入数据暂存至位置【0】int low=1;int high=i-1;while(low<=high){//在【low】和【high】中折半查找有序插入的位置int middle=(low+high)/2;//折半if(list[0]<list[middle]){//插入位置在前半段high=middle-1;}else{//插入位置在后半段low=middle+1;}}//whilefor(int j=i-1;j>=high+1;j--){//记录后移list[j+1]=list[j];}list[high+1]=list[0];//插入}//forcout<<"排序后:"<<endl;myshow(list,SIZE_A);return 0;}/*description:在标准输出设备上显示数组元素。parameter:int* p:指向整形数组首元素的指针int length:整形数据长度*/void myshow(int* p,int length){for(int i=0;i<length;i++){cout<<*(p+i)<<"\t";}cout<<endl;}
运行结果为:
时间与空间复杂度分析
空间复杂度:
从上述实现可以看出,折半插入排序所需辅助空间和直接插入排序相同(都只需要一个辅助空间,即哨兵);
时间复杂度:
折半插入排序仅仅减少了关键字比较的次数,而记录的移动次数不变。因此,折半插入排序的时间复杂度仍为O(n*n)。
0 0
- C实现折半插入排序
- 排序算法(C实现)---------- 折半插入排序
- 插入排序--折半插入排序[Java实现]
- 折半插入排序java实现
- c++实现折半插入排序
- C++实现折半插入排序
- Java实现折半插入排序
- 直接插入排序和折半插入实现
- C语言直接插入排序和折半插入排序算法的实现
- 插入排序之折半排序Java实现
- 插入排序--折半插入
- 插入排序--折半插入
- java实现折半插入排序算法
- 折半插入排序(java实现)
- Java 实现二分(折半)插入排序
- java实现折半插入排序算法
- 折半插入排序(数组实现)
- java实现折半插入排序(二分插入排序)
- 关于php自动转义问题,配置里magic_quotes_gpc的历史遗留问题
- 微信平台下两种消息处理流程
- Android基础之使用Fragment控制切换多个页面
- Program work 12. Merge Sort in Java
- BDaas “大数据即服务”的时代即将到来
- C++实现折半插入排序
- 转:人脸识别技术大总结1——Face Detection & Alignment
- android SQLite数据库组装sql的源码
- win32下生成dmp文件
- ARC是什么东东?retain和release到底怎么玩?(★firecat推荐★)
- 人生的第一个MakeFile贴出来纪念一下
- Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
- APK批量权限工具的说明。写在博客园了
- Android开发之SQLite的使用方法