排序算法-堆排序

堆排序

前置学习

了解排序的基本概念
点击传送门

原理

**堆排序(Heaps Sort)**是指利用堆这种数据结构所设计的一种排序算法。

堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:

  • 大顶堆(大根堆):每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;
  • 小顶堆(小根堆):每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;

实现

  1. 创建一个堆,将数据放在堆中存储。
  2. 按大顶堆构建堆,其中大顶堆的一个特性是数据将被从大到小取出,将取出的数据元素按照相反的顺序进行排列,数据元素就完成了排序。
  3. 然后从左到右,从上到下进行调整,构造出大顶堆。
  4. 入堆完成之后,将堆顶元素取出,将末尾元素置于堆顶,重新调整结构,使其满足堆定义。

代码

构建对数据结构

//构建堆数据结构
void HeapAdjust(int arr[], int i, int n)
{
   
	for (int child; 2 * i + 1 < n; i = child)
	{
   
		//子结点的位置=2*(父结点位置)+1
		child = 2

你可能感兴趣的:(数据结构,算法,数据结构,算法,排序,排序算法)