首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是堆排序算法?详述堆排序算法的原理?用C语言实现堆排序算法。内附完整代码。

大家好,我是贤弟!本文简单一下堆排序算法。堆排序与冒泡排序一样都是最常用的算法之一。

一、什么是堆排序算法?

堆排序算法是一种基于二叉堆数据结构的排序算法。

它的主要思想是将待排序的元素构建成一个二叉堆,然后将堆顶元素与堆底元素交换,使得最大(或最小)元素排在堆底,然后重新调整堆,再将堆顶元素与堆底元素交换,如此往复,直到所有元素都排好序。

二、堆排序算法的原理

堆排序算法的原理如下:

1. 将待排序的元素构建成一个二叉堆(大根堆或小根堆),使得每个节点的值都大于(或小于)它的左右子节点的值。

2. 将堆顶元素与堆底元素交换,使得最大(或最小)元素排在堆底。

3. 调整堆,使得堆仍然满足二叉堆的性质。

4. 重复第2步和第3步,直到所有元素都排好序。

三、代码示例

下面是用C语言实现堆排序算法的代码:

```c#include #include

// 调整堆void adjustHeap(int arr[], int i, int n) { int j = 2 * i + 1; // 左子节点 int temp = arr[i]; // 当前节点 while (j < n) { if (j + 1 < n && arr[j] j++; } if (temp < arr[j]) { // 如果当前节点小于子节点 arr[i] = arr[j]; // 子节点上移 i = j; j = 2 * i + 1; } else { break; } } arr[i] = temp; // 当前节点下移}

// 堆排序void heapSort(int arr[], int n) { // 构建堆 for (int i = n / 2 - 1; i >= 0; i--) { adjustHeap(arr, i, n); } // 排序 for (int i = n - 1; i >= 1; i--) { int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; adjustHeap(arr, 0, i); }}

int main() { int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1}; int n = sizeof(arr) / sizeof(int); heapSort(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0;}```

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OelkdMNz2h5SMQKgbqUGcsqA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券