排序算法-堆排序(含C语言代码示例)

一、算法介绍

        堆排序是一种基于二叉堆数据结构的排序算法。首先,构建最大堆(或最小堆),将待排序的数组视作一个完全二叉树,通过从最后一个非叶子节点开始向上调整,使得每个父节点的值都大于等于(最大堆)或小于等于(最小堆)其子节点的值。这步骤确保了最大(或最小)值位于堆的根节点。

        然后,将堆顶元素(最大值或最小值)与数组的最后一个元素交换位置,并将堆的大小减一。接着,对新的堆顶进行堆调整,使得剩余元素重新满足堆的性质。重复以上步骤,直到堆的大小减至1,即完成排序。

        堆排序的时间复杂度为O(n log n),其中n是待排序数组的长度。它具有原地排序的特点,不需要额外的辅助空间,且相对于快速排序等算法,堆排序在最坏情况下也能保持较好的性能。然而,与归并排序相比,堆排序对于稳定性的保持较差,因为在堆调整的过程中可能破坏相同元素之间的相对顺序。

二、代码示例

void swap(int *a, int *b) {
    int temp = *b;
    *b = *a;
    *a = temp;
}

void max_heapify(int index[], int start, int end) {
    int dad = start;
    int son = dad * 2 + 1;
    while (son <= end) {
        if (son + 1 <= end && index[son] < index[son + 1])
            son++;
        if (index[dad] > index[son])
            return;
        else {
            swap(&index[dad], &index[son]);
            dad = son;
            son = dad * 2 + 1;
        }
    }
}

void heap_sort(int index[], int len) {
    int i;
    for (i = len / 2 - 1; i >= 0; i--)
        max_heapify(index, i, len - 1);
    for (i = len - 1; i > 0; i--) {
        swap(&index[0], &index[i]);
        max_heapify(index, 0, i - 1);
    }
}

相关推荐

  1. 排序算法-排序C语言代码示例

    2024-01-17 20:22:03       69 阅读
  2. 排序算法-希尔排序C语言代码示例

    2024-01-17 20:22:03       57 阅读
  3. 排序-C语言

    2024-01-17 20:22:03       34 阅读
  4. 排序---C语言

    2024-01-17 20:22:03       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-17 20:22:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-17 20:22:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-17 20:22:03       87 阅读
  4. Python语言-面向对象

    2024-01-17 20:22:03       96 阅读

热门阅读

  1. Python---爬虫学习(详细注释/优化)

    2024-01-17 20:22:03       57 阅读
  2. 微信小程序怎样给事件传值的

    2024-01-17 20:22:03       54 阅读
  3. 边缘计算发展的瓶颈

    2024-01-17 20:22:03       54 阅读
  4. 实现将信息作为txt,pdf,图片的形式保存到电脑~

    2024-01-17 20:22:03       50 阅读