堆排序(Heapsort)是指利用堆积树(堆)这种 数据结构所设计的一种 排序算法,它是选择排序的一种。可以利用 数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是 完全二叉树。
本次堆排序利用了小根堆堆顶记录的 关键字最小这一特征,使得在当前无序区中选取最小关键字的记录变得简单。
用小根堆排序的基本思想:
① 先将初始文件R[1..n]建成一个小根堆,此堆为初始的无序区
② 再将关键字最小的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≥R[n].key
③由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最小的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n-1..n],且仍满足关系R[1..n-2].keys≥R[n-1..n].keys,同样要将R[1..n-2]调整为堆。
……
直到无序区只有一个元素为止。
代码:
头文件:
HeapSort.h
#pragma once
#include<stdlib.h>
#include<stdio.h>
#include<