博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法之堆排序
阅读量:4353 次
发布时间:2019-06-07

本文共 853 字,大约阅读时间需要 2 分钟。

        堆的定义:1)全然二叉树,2)每一个结点的值都大于其左右孩子结点的值。依据堆的定义可知,最大值就是根结点。其次就是根结点左右孩子结点中的一个……

        堆排序有两个非常重要的过程:1)建堆。2)堆维护。实质上,这两个过程都能够通过一个函数来实现。

void HeapAdjust(SqList* list, int obj, int length){	int tmp = list->data[obj - 1];	for (int j = 2*obj; j <= length; j *= 2)	{//一定要注意下标和编号的不统一。堆排序開始编号是1。而本程序的数据结构開始编号是0。		//也就是说编号j相应的下标是j-1		if (j < length && list->data[j-1] < list->data[j])			j++;		if (list->data[j-1] <= tmp)		{			break;		}		list->data[obj - 1] = list->data[j-1];		obj = j;	}	list->data[obj - 1] = tmp;}void HeapSort(SqList* list){	//第一次循环,建立最大堆	for (int i = list->length / 2; i > 0; i--)	{//注意,传入的參数都是下标再加1		HeapAdjust(list, i, list->length);	}	//第二次循环。排序	for (int i = list->length; i > 0; i--)	{		swap(list->data[0],list->data[i - 1]);		HeapAdjust(list, 1, i-1);	}}
posted on
2017-08-17 21:24 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/mthoutai/p/7384457.html

你可能感兴趣的文章
Codeforces 429B Working out(递推DP)
查看>>
linux查看mysql运行日志
查看>>
Linux发展历史
查看>>
ECSHOP 商品,分类自定义URL
查看>>
Myeclipse 10.7配置egit及导入项目
查看>>
php网站高并发 大流量访问的处理及解决方法
查看>>
DateTime
查看>>
SharePoint2013和2010 webparth上传附件到其他列表(ViewState实现)
查看>>
Android热门网络框架Volley详解
查看>>
深拷贝和浅拷贝
查看>>
数据仓库任务调度系统平台建设
查看>>
sql备份
查看>>
android setting 设置永不休眠
查看>>
你可能不知道的 JavaScript 中数字取整
查看>>
poj3253
查看>>
利用Java编写简单的WebService实例
查看>>
[HAOI 2008]硬币购物
查看>>
[总结]多项式求逆代替分治 $\text{FFT}$
查看>>
磁盘缓存专题之三:磁盘缓存的算法:写算法
查看>>
EC笔记:第4部分:18、接口正确使用,不易被误用
查看>>