首页 > 日常生活->堆排序C++实现(堆排序算法实现的思路与C++代码实现)

堆排序C++实现(堆排序算法实现的思路与C++代码实现)

***不贱渐渐贱+ 论文 8597 次浏览 评论已关闭

堆排序算法实现的思路与C++代码实现

什么是堆排序

堆排序是一种基于二叉堆结构的排序算法,其主要思想是将待排序数组构建成一个二叉堆,并反复将最大或最小值交换至堆的末端,最终完成排序。

堆排序是一种原地排序算法,在最好、最坏和平均情况下的时间复杂度均为O(nlogn)。

堆排序算法思路

堆排序的核心是构建二叉堆和不断交换堆顶元素和末尾元素,具体步骤如下:

  • 将待排序数组构建成二叉堆,即建立一个元素个数与待排序数组相同的完全二叉树,满足父节点的值大于或小于其子节点的值,称为大根堆或小根堆;
  • 从堆底开始,依次将堆顶元素与堆末尾元素交换,将堆大小减一,并重新对堆进行调整,使其满足堆的性质,其中调整过程即为向下特定子树的过程,称为堆化(heapify);
  • 重复第二步,直至堆大小为1,排序完成。

C++代码实现

以下为C++实现的堆排序代码,其中,构建大根堆的函数buildHeap和向下调整的函数heapify是堆排序算法的关键。

``` #include using namespace std; void heapify(int* arr, int i, int heapSize) { int left = i * 2 + 1, right = i * 2 + 2, largest = i; if (left < heapSize && arr[left] > arr[largest]) { largest = left; } if (right < heapSize && arr[right] > arr[largest]) { largest = right; } if (largest != i) { swap(arr[i], arr[largest]); heapify(arr, largest, heapSize); } } void buildHeap(int* arr, int n) { int heapSize = n; for (int i = n / 2 - 1; i >= 0; i--) { heapify(arr, i, heapSize); } } void heapSort(int* arr, int n) { buildHeap(arr, n); for (int i = n - 1; i > 0; i--) { swap(arr[0], arr[i]); heapify(arr, 0, i); } } int main() { int arr[] = {7, 3, 5, 8, 1, 9}; int n = sizeof(arr) / sizeof(int); heapSort(arr, n); for (int i = 0; i < n; i++) { cout << arr[i] << \" \"; } return 0; } ```

总结

堆排序是一种高效的排序算法,其核心在于构建二叉堆和不断交换堆顶元素和末尾元素,并进行堆化调整,以满足堆的性质。C++语言实现堆排序较为简单,建议初学者多加练习,并结合常规排序算法进行比较,加深对堆排序的理解。