【数据结构----笔记4】插入排序算法之【折半插入排序算法】
来源:互联网 发布:java内存泄露分析工具 编辑:程序博客网 时间:2024/06/15 11:26
/*______________________________________________________________________________________________________________文件说明:【1】根据数据元素是否完全在内存中,可以将排序算法分为两类:【内部排序】,【外部排序】【2】【内部排序】是指在排序期间元素全部存放在内存中的元素;【3】【外部排序】是指在排序期间,元素无法全部同时存放在内存中,必须在排序过程中,根据要求不断在内、外存 之间移动的排序。【4】【排序】就是重新排列表中的元素,使表中的元素满足按关键字递增或递减的过程。【5】【排序算法的稳定性】如果待排序表中有两个元素Ri,Rj,其对应的关键字Keyi=Keyj,且在排序前Ri在Rj前面,如果使用某一排序算法排序后,Ri仍在Rj的前面,则称这个排序算法是稳定的,否则称该排序算法不稳定的【6】注意!!!(1)算法是否具有稳定性并不能衡量一个算法的优劣,它主要是对算法性质进行描述。(2)对于不稳定的排序算法,只需举出一组关键字的示例说明它的不稳定性即可。【7】一般情况下:内部排序算法在执行过程中都要进行两种操作:【比较】和【移动】通过比较两个关键字,确定对应的元素的前后关系,然后通过移动元素以达到有序。【8】并不是所有的内部排序算法都要基于比较操作,事实上,基数排序就不是基于比较的。内部排序:【1】插入排序算法(1)直接插入排序(2)折半插入排序(3)希尔排序(shell sort)【2】交换排序(1)冒泡排序(bubble sort)(2)快速排序【3】选择排序(1)简单选择排序(2)堆排序【4】二路归并排序(merge sort)【5】基数排序外部排序______________________________________________________________________________________________________________*/#include<iostream>using namespace std;/*____________________________________________________________________________________________________________【模块一】折半插入排序【函数原型】template<typename ElemType>void BinSort(ElemType array[],int iLength)【函数说明】【1】对记录数组array做【折半插入排序】【2】iLength为记录中待排序记录的数目【算法思想】【1】从查找算法的讨论中可知,对于【有序的顺序表】进行折半查找,其性能优于顺序查找。所以,可以将【折半查找】的思想应用在有序的记录中确认插入的位置,相应的排序算法称为【折半插入排序算法】【2】采用【折半插入排序算法】,可以减少关键字比较的次数。每插入一个元素,需要比较的次数最大折半判定树的深度。___________________________________________________________________________________________________________*/template<typename ElemType>void BinSort(ElemType array[],int iLength){ElemType temp;for(int i=1;i<iLength;i++){temp = array[i];int iLow = 0;int iHigh = i-1;int iMid = 0;while(iLow <= iHigh){iMid = (iLow+iHigh)/2;if(temp <array[iMid]){iHigh = iMid - 1;}else{iLow = iMid + 1;}}for(int j=i-1;j>=iLow;j--){array[j+1] = array[j];}array[iLow]=temp;}}/*____________________________________________________________________________________________________________【主函数】 控制台应用程序 我们的程序从这里开始执行___________________________________________________________________________________________________________*/int main(){int array[10]={3,5,2,7,8,9,1,6,4,0};cout<<"显示需要排序的序列"<<endl;for(int i=0;i<10;i++)cout<<array[i]<<" ";cout<<"排序的结果是:"<<endl;BinSort<int>(array,10);for(int i=0;i<10;i++)cout<<array[i]<<" ";system("pause");return 0;}
阅读全文
0 0
- 【数据结构----笔记4】插入排序算法之【折半插入排序算法】
- 【数据结构】算法10.2 插入排序-折半插入
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序算法
- 排序算法之二 折半插入排序
- 排序算法总结之折半插入排序
- 排序算法之折半插入排序
- 排序算法之折半插入排序
- 排序算法之折半插入排序
- 常用排序算法之折半插入排序
- 数据结构与算法简记:折半插入排序
- 数据结构排序算法——折半插入
- 数据结构与算法---直接折半插入排序
- 排序算法之折半插入算法
- Maven学习笔记(十二)-使用maven Profile实现多环境构建
- SqueezeNet和Faster RCNN结合
- Eclipse快捷键大全
- 使用MPAndroidChart开源库实现折线图
- typedef 用法
- 【数据结构----笔记4】插入排序算法之【折半插入排序算法】
- Android react native windows常见问题
- HTML5 Canvas 六角光阑动态效果
- 初识jquery
- 机器人的行动范围
- [转]解决a different object with the same identifier value was already associated with the session错误
- Win7系统中unity web player是什么程序
- cmd命令
- android 相机使用(拍照、录像、图片查看、静态人脸识别、延时拍照)