教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

C++八大排序算法(4)

来源:网络收集 时间:2026-09-02
导读: 快速排序是不稳定的。最理想情况算法时间复杂度O(nlog2n),最坏O(n2) ===================================================== */ void quick_sort(int *x, int low, int high) { int i, j, t; if (low { i = low;

快速排序是不稳定的。最理想情况算法时间复杂度O(nlog2n),最坏O(n2)

===================================================== */

void quick_sort(int *x, int low, int high) {

int i, j, t;

if (low < high) /*要排序的元素起止下标,保证小的放在左边,大的放在右边。这里以下标为low的元素为基准点*/

{

i = low; j = high;

t = *(x+low); /*暂存基准点的数*/

while (i

{

while (it) /*在右边的只要比基准点大仍放在右边*/ {

j--; /*前移一个位置*/

}

if (i

*(x+i) = *(x+j); /*上面的循环退出:即出现比基准点小的数,替换基准点的数*/ i++; /*后移一个位置,并以此为基准点*/

}

while (i

i++; /*后移一个位置*/

}

if (i

*(x+j) = *(x+i); /*上面的循环退出:即出现比基准点大的数,放到右边*/ j--; /*前移一个位置*/

} }

*(x+i) = t; /*一遍扫描完后,放到适当位置*/

quick_sort(x,low,i-1); /*对基准点左边的数再执行快速排序*/ quick_sort(x,i+1,high); /*对基准点右边的数再执行快速排序*/

} } /*

================================================ 功能:堆排序

输入:数组名称(也就是数组首地址)、数组中元素个数 ================================================

*/ /*

==================================================== 算法思想简单描述:

堆排序是一种树形选择排序,是对直接选择排序的有效改进。 堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当

满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2) 时称之为堆。在这里只讨论满足前者条件的堆。

由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项。完全二叉树可以 很直观地表示堆的结构。堆顶为根,其它为左子树、右子树。

初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储顺序, 使之成为一个堆,这时堆的根节点的数最大。然后将根节点与堆的最后一个节点 交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点 的堆,并对它们作交换,最后得到有n个节点的有序序列。

从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素 交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数 实现排序的函数。

堆排序是不稳定的。算法时间复杂度O(nlog2n)。

*/ /*

功能:渗透建堆

输入:数组名称(也就是数组首地址)、参与建堆元素的个数、从第几个元素开始 */

void sift(int *x, int n, int s) {

int t, k, j;

t = *(x+s); /*暂存开始元素*/ k = s; /*开始元素下标*/

j = 2*k + 1; /*右子树元素下标*/

while (j

if (j

C++八大排序算法(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/605592.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)