- 1、本文档共91页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模块九 内部排序 任务一 内部排序的概念和排序的方法 1、排序的基本概念 2、排序的相关术语 3、创建随机顺序表 任务二 插入排序 子任务1 直接插入排序 1、直接插入排序的算法思想 2、直接插入排序的算法与C++实现 3、算法分析 子任务2 表插入排序 1、表插入排序的概念 2、表插入排序的基本思想 3、表插入排序的重拍 4、算法分析 子任务 3 希尔排序 1、希尔排序的概念 2、希尔排序的算法思想 3、希尔排序的算法与C++实现 4、算法分析 任务三 交换排序 子任务1 冒泡排序 1、冒泡排序的基本思想 2、冒泡排序算法与c++实现 3、 算法分析 子任务2 快速排序 1、快速排序法的算法思想 2、快速排序的算法与C++实现 3、算法分析 任务四 选择排序 子任务1 简单选择排序 1、简单选择排序的基本思想 2、简单选择排序的算法与C++实现 3、算法分析 子任务1 堆排序 1、堆排序的定义 2、堆排序的基本思想 3、堆排序的算法与C++实现: 4、算法分析 任务五 归并排序 1、归并排序的概念 2、归并排序的基本思想 3、归并排序的算法与C++实现 4、算法分析 任务六 基数排序 1、基数排序的概念 2、基数排序的算法与C++实现 3、算法分析 4、总结 上述所有的排序算法由于排序数据的存储方式和数据的产生方式都是一致的,所以这一模块的所有算法都可以放在一个类里完成。这时的main函数修改为如下的形式: 学材小结 谢谢使用本教材!!! S[s]=S[i]; //c插在i上 s=i; } S[s]=c;//插入 } void StuScore::StuScoreHeapSort()//学生成绩堆排序 { int j; double s,S[51]; for(j=1;j51;j++)//为了保存Score数组的顺序不被改变Score【0】单元未用 S[j]=Score[j-1]; for(j=50/2;j0;--j)//将S【1--50】建成大根堆 StuScoreHeapadjust(S,j,50); for(j=50;j1;--j) { s=S[1]; S[1]=S[j];//将堆顶元素和当前未经排序子序列S【1--j】中的最后一个元素交换 S[j]=s; StuScoreHeapadjust(S,1,j-1);//将S【1--j】重新调整成为大根堆 } int cnt=0;//计数器初始化为0 for(j=1;j51;j++) { coutS[j] ; cnt++; //换行计数器 if(cnt%10==0) coutendl;//十个一行 } } int main() { StuScore s; s.StuScoreHeapSort();//调用学生成绩的堆排序功能 return 0; } 时间效率:O(nlog2n)。因为整个排序过程中需要调n-1 次堆顶点的调整,而每次堆排序算法本身耗时为log2n; 稳定性: 不稳定。 优点:适合于待排序的记录数较大的情况,对于n 个记录进行排序的需的时间是O(nlog2n)。在最坏情况下,其时间复杂性也为O(nlog2n)。相对于快速排序来说,这是堆排序的最大优点。 归并排序 :要求待排序列的子序列有序。归并就是将两个或两个以上的有序表组合成一个新的有序表。其中将将两个有序表组合成一个新的有序表的排序方法叫2-路归并排序。 归并排序基本思想 :将这些有序的子序列进行合并,从而得到有序的序列。合并是一种常见运算,其方法是:比较各子序列的第一个记录的关键字值,最小的一个就是排序后序列的第一个记录的关键字值。取出这个记录,继续比较各子序列现在的第一个记录的关键字值,便可找出排序后的第二记录。如此继续下去,最终可以得到排序结果。因此,归并排序的基础是合并。 二路归并排序基本思想 :如果待排序的初始序列含有n个记录,可以先把它看成n个有序的子序列,每个子序列长度为1,因而都是排好序的。二路归并排序先将每相邻的 两个子序列合并,得到?n/2?个长度为2或1的有序子序列,每个子序列包含2个记录(最后子序列可能是一个)。再将这些子序列两两合并,得到[[n/2]/2]个有序子序列。如此反复,直至得到一个长度为n的有序序列为止。 归并排序过程:初始输入序
文档评论(0)