1. 程式人生 > >數據結構之堆排序

數據結構之堆排序

節點 -- tdi bsp std cst style pso print

ppt(原創):

https://files.cnblogs.com/files/eastblue/堆排序.pptx

視頻(原創):

https://www.bilibili.com/video/av16199074/

代碼:

#include<cstdio>
#include<cstring>

const int maxn=1e9+7;
int b[50050];

void fun(int a[],int i)//a數組i節點完成操作 
{
    int l=sizeof(a),t;
    while(2*i+1<l)
    {
        t=a[i];
        if
(2*i+2<l)//有兩個孩子節點 { if(a[2*i+1]<=a[2*i+2]&&a[2*i+1]<a[i]) //與左孩子交換 { a[i]=a[2*i+1]; a[2*i+1]=t; i=2*i+1; } else if(a[2*i+2]<a[2*i+1]&&a[2*i+2]<a[i])//與右孩子交換 { a[i]
=a[2*i+2]; a[2*i+2]=t; i=2*i+2; } else break; } else//只有一個孩子節點 { if(a[2*i+1]<a[i]) { a[i]=a[2*i+1]; a[2*i+1]=t; i=2*i+1; }
else break; } } } void heapsort(int a[]) { int l=sizeof(a); for(int i=(l-2)/2;i>=0;i--)//數組從0開始,所以從(l-2)/2開始’篩選‘,(對應ppt第二步) { fun(a,i); } for(int i=1;i<=l;i++)//(對應ppt第三步) { b[i-1]=a[0]; a[0]=a[l-i]; a[l-i]=maxn; fun(a,0); } for(int i=0;i<l;i++) a[i]=b[i]; } int main() { int array[8]={49,38,65,97,76,13,27,49}; heapsort(array); for(int i=0;i<8;i++) printf("%d ",array[i]); }

數據結構之堆排序