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
您可能关注的文档
- 第九章 节肢动物门..ppt
- 第九章 金融创新与金融发展..ppt
- 第九章 经济增长和经济周期..ppt
- 第九章 矩阵位移法..ppt
- 第九章 控制单元的功能..ppt
- 第九章 矿物的形成与变化..ppt
- 第九章 历史构造分析..ppt
- 第九章 量纲分析和相似原理..ppt
- 第九章 流量测量..ppt
- 第九章 炉内辐射传热计算..ppt
- 初中七年级英语下册 Unit 6 “创意表达与有效沟通” 单元整体教学设计.docx
- 小学六年级综合实践活动《兵器与和平》复习知识清单.docx
- 一、模型思维统摄下的天文现象实证:日食与月食形成机理的深度探究教案.docx
- 人教版三年级下册数学24时计时法1.pptx
- 小学信息技术四年级下册《第5课 网上搜索》复习知识清单.docx
- 解决问题铺地砖问题 人教版三年级数学下册.pptx
- 第2课时两条直线垂直课件人教版七年级数学下册.pptx
- 友谊地久天长——相伴相助+融洽相处+课件--2025-2026学年高二下学期人际交往主题班会.pptx
- 2026届高考作文满分通关之审题立意万与拟题+课件.pptx
- 2026届高考语文复习:散文阅读易错与突破+课件.pptx
原创力文档

文档评论(0)