堆排序

来源:互联网 发布:手机破解软件资源 编辑:程序博客网 时间:2024/06/08 04:27
#include<iostream>#include<cstdio>using namespace std;const int maxn=10001;int dui[maxn];int n,cnt=0;void push(int a){    cnt++;    int now=cnt;    dui[now]=a;    while(now>1)    {        int fa=now/2;        if(dui[now]<dui[fa])        {            swap(dui[now],dui[fa]);            now=fa;        }        else break;    }    return;}void pop(){    dui[1]=dui[cnt];    int now=1;    while(now*2+1<=cnt)//**用while循环!!!!!!!!**    {        int l=now*2,r=now*2+1;        if(dui[l]<dui[now])        {            if(dui[r]<dui[now]&&dui[r]<dui[l])                swap(l,r);                swap(dui[now],dui[l]);                now=l;//**要注意这里不能加大括号!!!**        }        else if(dui[r]<dui[now])        {            swap(dui[r],dui[now]);            now=r;        }    }    cnt--;    return;}int top(){    if(cnt>=0)    {        return dui[1];    }}int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%d",&dui[i]);        push(dui[i]);    }    for(int i=1;i<=n;i++)    {        cout<<top()<<'\n';        pop();    }    return 0;}
原创粉丝点击