堆排序

Posted 哇小明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

int maxHeap(int *a,int start,int end)
    int node = start;
    int left = 2*node+1;
    int tmp = a[node];

    for(;left<end;node = left,left=2*node+1)
        if(a[left] < a[left+1] && left<=end)
            left ++;
        if(tmp > a[left])
            break;
        else
            a[node]=a[left];
            a[left]=tmp;
        
    
    return 0;


int HeapSort(int *a,int size)

    for(auto i=size/2-1;i>=0;i--)
        maxHeap(a,i,size-1);
    
    for(auto i=size-1;i>=0;i--)
        int tmp = a[0];
        a[0] = a[i];
        a[i] = tmp;
        maxHeap(a,0,i-1);
    
    return 0;

int main()
    int a[] = 20,30,90,40,70,110,60,10,100,50,80;
    int ilen = (sizeof(a)) / (sizeof(a[0]));
    //heapSortAsc(a, ilen);
    HeapSort(a,ilen);
    for (auto i=0; i<ilen; i++)
        cout << a[i] << " ";
    return 0;
 

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法:堆排序-Java实现

排序算法总结之堆排序

[ 数据结构 -- 手撕排序算法第七篇 ] 堆及其堆排序

重温基础算法内部排序之堆排序法

重温基础算法内部排序之堆排序法

堆(利用堆进行数组排序)-堆排序