什么是堆排序,用C语言模拟堆排序

什么是堆排序

堆排序是一种基于堆数据结构的排序算法。堆是一种完全二叉树,可以分为最大堆和最小堆。最大堆的父节点始终大于等于左右子节点,最小堆的父节点始终小于等于左右子节点。在堆排序中,首先将待排序的数组构建成一个最大堆或最小堆,然后依次将堆顶元素与最后一个元素交换,然后重新调整堆,使得剩余元素重新满足堆的特性。这个过程会像“下沉”一样,有时又被称为“堆化”,直到所有元素排好序为止。时间复杂度为O(nlogn)。


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

#include <stdio.h>
#include <stdlib.h>

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

// 调整堆
void heap_adjust(int arr[], int i, int n)
{
    int j, tmp;
    tmp = arr[i];
    j = 2 * i + 1;
    while (j < n) {
        if (j + 1 < n && arr[j + 1] > arr[j]) {
            j++;
        }
        if (arr[j] <= tmp) {
            break;
        }
        arr[i] = arr[j];
        i = j;
        j = 2 * i + 1;
    }
    arr[i] = tmp;
}

// 堆排序函数
void heap_sort(int arr[], int len)
{
    int i;
    // 构造初始堆
    for (i = len / 2 - 1; i >

猜你喜欢

转载自blog.csdn.net/q6115759/article/details/130506519