- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
? 以顺序表作为存储结构的快速排序算法 ? 时间复杂度: O(nlogn) ? 快速排序在 最好情形 下 ( 左、右子区间的长度大致相 等 ) ,则结点数 n 与二叉树深度 h 应满足 log 2 nhlog 2 n+1 ,所以总的比较次数不会超过 (n+1)log 2 n 。因此,快速排序的最好时间复杂度应为 O (nlog 2 n) 。理论上已经证明,快速排序的平均时间 复杂度也为 O ( nlog 2 n) 。 ? 在 最坏情况 下 ( 逆序或正序 ) ,时间复杂度为 O(n 2 ) ? 空间复杂度: O(logn) ? 在最坏情况下 ( 逆序或正序 ) ,空间复杂度为 O(n) ? 不稳定 的排序方法 快速排序不适合对小规模的序列进行排序 ? 10.3 快速排序方法的改进 ? ? ? 三者取中的方法选取枢轴元素 划分的过程中进行“起泡”操作 快速排序算法被认为是内部排序方法中最好的一种 最坏情况下的快速排序 1 2 3 4 5 6 7 8 9 04 13 27 38 49 49* 55 65 97 04 13 27 38 49 49* 55 65 97 13 27 38 49 49* 55 65 97 27 38 49 49* 55 65 97 38 49 49* 55 65 97 49 49* 55 65 97 49* 55 65 97 55 65 97 65 97 97 最好情况下的快速排序 1 2 3 4 5 划分 6 7 8 9 49 04 65 97 13 55 49* 38 27 27 04 38 13 49 55 49* 97 65 划分 划分 13 04 27 38 划分 49* 55 97 65 划分 划分 04 13 38 49* 65 97 65 04 10.4 选择排序 10.4.1 简单选择排序 ? 简单选择排序的 基本思想 是:第一趟 在 n 个记录中选取最小记录作为有序 序列的第一个记录,第二趟在 n-1 个 记录中选取最小记录作为有序序列的 第二个记录,第 i 趟在 n-i+1 个记录中 选取最小的记录作为有序序列多中的 第 i 个记录。 ? 简单选择排序过程示例 0 1 2 3 4 5 6 7 8 34 12 49 28 31 52 51 49* 初始关键字序列 12 34 49 28 31 52 51 49* 12 28 49 34 31 52 51 49* 12 28 31 34 49 52 51 49* 12 28 31 34 49 52 51 49* 12 28 31 34 49 52 51 49* 12 28 31 34 49 49* 51 52 i=1 i=2 i=3 i=4 i=5 i=6 i=7 12 28 31 34 49 49* 51 52 return ? 简单选择排序算法 ? 以顺序表作为存储结构的简单选择排序算法 void SelectSort(SqList L) {// 对顺序表作简单选择排序 for(i = 1; i L.ength; i++) { for(i = 1; i L.ength; i++) { for(k = i, j =i; k = L.length; k++) for(k = i+1, j = i; k = L.length; k++) for(k = i, j =i; k = L.length; k++) if (L.r[k].key L.r[j].key) j = k; if (L.r[k].key L.r[j].key) j = k; if (j != i) {L.r[i] if (j != i) {L.r[i] ← ← → → L.r[j];} L.r[j];} } //for }//if } //for } // SelectSort ? 分析简单选
原创力文档


文档评论(0)