博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序--采用快速排序(利用大堆实现升序,小堆实现降序)
阅读量:4029 次
发布时间:2019-05-24

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

    对堆进行排序,利用大堆实现升序,小堆实现降序。例如升序的实现,将较大数据存放在最后面,依次往前存放数据。具体为交换第一个元素和最后一个元素,再将不包含最后一个元素的堆进行下调,使堆保持大堆,将最大数据存放在堆中第一个位置,循环执行上述步骤,直到需要下调的数据个数为0.

void AdjustDown(int *a, size_t root, size_t size)//下调--k为数组下标,size为数组元素个数{//大堆	size_t parent = root;	size_t child = parent * 2 + 1;	while (child < size)	{		if (child + 1 < size && a[child] < a[child + 1])		{			++child;		}		if (a[parent] < a[child])		{			swap(a[parent], a[child]);			parent = child;			child = parent * 2 + 1;		}		else//注意不满足交换条件时跳出本次循环		{			break;		}	}}void HeapSort(int *a, size_t size)//堆排序--采用快速排序(利用大堆实现升序,小堆实现降序){	assert(a);	for (int i = ((int)size-2)/2; i >= 0; --i)//建堆	{		AdjustDown(a, i, size);//下调i为堆顶的堆	}	for (size_t i = 0; i < size; ++i)	{//由于该堆为大堆,则把第一个元素和最后一个元素进行交换,再进行下调		swap(a[0], a[size - 1 - i]);//交换堆顶数据和最后一位的数据,使最后一个元素存放最大(小)数		//size-1-i为进行下调的元素个数,每交换一次减1,使最后一个元素不参与下调,下调使堆顶存放size-1-i个数中最大(小)数		AdjustDown(a, 0, size - 1 - i);	}}

测试用例如下:

void Test(){//堆排序	int arr[] = { 10, 16, 18, 12, 11, 13, 15, 17, 14, 19 };	size_t size = sizeof(arr) / sizeof(arr[0]);	HeapSort(arr, size);	for (size_t i = 0; i < size; ++i)	{		cout << arr[i] << " ";	}	cout << endl;}

本文出自 “” 博客,请务必保留此出处

转载地址:http://lilbi.baihongyu.com/

你可能感兴趣的文章
关于静态块、静态属性、构造块、构造方法的执行顺序
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
优化IDEA启动速度,快了好多。后面有什么优化点,会继续往里面添加
查看>>
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>