第九章 排序(一).ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 排序(一)

140-* 快速排序的算法 #include dataList.h template class T void QuickSort (dataListT L, const int left, const int right) { //对元素Vector[left], ..., Vector[right]进行排序, //pivot=L.Vector[left]是基准元素, 排序结束后它的 //位置在pivotPos(其值看成是,小于等于pivot的元素个数), 左边元素的都小于或等于它, 右边都大于它 if (left right) { //元素序列长度大于1时 int pivotpos = L.Partition (left, right); //划分 QuickSort (L, left, pivotpos-1); 140-* QuickSort (L, pivotpos+1, right); } }; template class T int dataListT::Partition (const int low, const int high) { //数据表类的共有函数 int pivotpos = low; ElementT pivot = Vector[low]; //基准元素 for (int i = low+1; i = high; i++) //检测整个序列, 进行划分 140-* if (Vector[i] pivot) { pivotpos++; if (pivotpos != i) Swap(Vector[pivotpos],Vector[i]); } //小于基准的交换到左侧去 Vector[low] = Vector[pivotpos]; Vector[pivotpos] = pivot; //将基准元素就位 return pivotpos; //返回基准元素位置 }; 算法分析 140-* 算法quicksort是一个递归的算法, 其递归树如图所示。 算法partition利用序列第一个元素作为基准,将整个序列划分为左右两个子序列。算法中执行了一个循环,只要是排序码小于基准元素排序码的元素都移到序列左侧,最后基准元素安 21 25* 25 49 08 16 140-* 到位, 函数返回其位置。 从快速排序算法的递归树可知,快速排序的趟数取决于递归树的高度。 如果每次划分对一个元素定位后,该元素的左侧子序列与右侧子序列的长度相同,则下 一步将是对两个长度减半的子序列进行排序,这是最理想的情况。 在 n个元素的序列中,对一个元素定位所需时间为 O(n)。若设 t (n) 是对 n 个元素的序列进行排序所需的时间,且每次对一个元素正确定位后,正好把序列分为长度相等的两个子序列, 140-* 此时, 总的计算时间为: T(n) ? cn + 2T(n/2 ) // c 是一个常数 ? cn + 2 ( cn/2 + 2T(n/4) ) = 2cn + 4T(n/4) ? 2cn + 4 ( cn/4 +2T(n/8) ) = 3cn + 8T(n/8) ……… ? cn log2n + nT(1) = O(n log2n ) 可以证明,函数quicksort的平均计算时间也是O(nlog2n)。实验结果表明: 就平均计算时间而言,快速排序是内排序方法中最好的一个。 140-* 用第一个元素作为基准元素 快速排序退化的例子 08 16 21 25 25* 49 08 0 1 2 3 4 5 pivot 初始 16 21 25 25* 49 08 16 21 25 25* 49 21 08 16 25 25 25* 49 08 16 21 25* 49 25* 08 16 21 25 49 08 16 21 25 25* i = 1 i = 2 i = 3 i = 4 i = 5 140-* 用居中排序码元素作为基准元素 08

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档