实现堆排序

来源:互联网 发布:网络摄像头通用pc软件 编辑:程序博客网 时间:2024/06/08 12:16

堆排序是在编程中经常用到的东西,在c++的STL底层里面有make_heap, push_heap, pop_heap 和 sort_heap四个接口函数,我们用到的最多的是STL中的priority_queue,其中的底层也是利用前面几个函数实现的。下面我们就自己实现以下堆排序,主要包括调整堆结构,构造堆和堆排序几个接口函数。

#include <iostream>using namespace std;void Adjust_Heap(int array[], int p, int N){    int parent, child;    for (parent = p; (parent * 2+1) < N; parent = child)    {        child = parent * 2 + 1;        if (child != N - 1 && array[child] < array[child + 1])            child++;        if (array[parent] >= array[child])            break;        else            swap(array[parent], array[child]);    }}void Build_Heap(int array[], int N){    for (int i = N / 2 - 1; i >= 0; i--)        Adjust_Heap(array, i, N);}void Heap_Sort(int array[], int N){    Build_Heap(array, N);    for (int i = N - 1; i >= 0; i--)    {        swap(array[0], array[i]);        Adjust_Heap(array, 0, i);    }}int main(){    int array[1000];    for (int i = 0; i < 1000; i++)        array[i] = rand() % 10000;    Heap_Sort(array, 1000);    return 0;}

代码在主函数随机生成1000个0-10000的数进行堆排序,可以直接运行查看结果。

0 0
原创粉丝点击