最大堆排序

// 最大堆调整函数
void max_heapify(int arr[], int parent, int end) {
    int child = parent * 2 + 1;
    while (child <= end)
    {
        if (child + 1 <= end && arr[child] < arr[child + 1])
            child++;

        if (arr[parent] < arr[child])
        {
            std::swap(arr[parent], arr[child]);
            parent = child;
            child = 2 * parent + 1;
        }
        else break;
    }
}

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务