【数据结构----笔记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;}












原创粉丝点击