9

来源:互联网 发布:网络初始化失败怎么办 编辑:程序博客网 时间:2024/04/29 13:10

上午看堆,不懂不懂……

下午就写堆排序,模拟了一个建堆的过程,把堆顶存好后,把堆末放到堆顶,重新建堆,结果排好了序。

总感觉不对,一问石学姐,汗,重头戏根本没写——调整。

——为什么要调整呢?重建也可以啊。

——调整比较快。

(杨学长……有点闲)

下面是我只有重建没调整的堆排序:

#include<stdio.h>
#define N 1000
int main()
{
    int i,a[N],b[N],n,m,t;
    scanf("%d",&m);
    n=m;
    for(i=1;i<=m;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=1;n>=3;i++)
    {
        while(n>1)
        {
            if(n==(n/2*2+1))
            {
                if((a[n/2]>a[n])&&(a[n/2]>a[n-1]))
                {
                    n=n-2;
                }
                else if((a[n]>a[n/2])&&(a[n]>a[n-1]))
                {
                    t=a[n/2];
                    a[n/2]=a[n];
                    a[n]=t;
                    n=n-2;
                }
                else if(a[n-1]>a[n/2]&&a[n-1]>a[n])
                {
                    t=a[n/2];
                    a[n/2]=a[n-1];
                    a[n-1]=t;
                    n=n-2;
                }
            }
            else
            {
                if(a[n/2]>a[n])
                {
                    n=n-1;
                }
                else
                {
                    t=a[n/2];
                    a[n/2]=a[n];
                    a[n]=t;
                    n=n-1;
                }
            }
        }
        b[i]=a[1];
        n=m-i;
        a[1]=a[n+1];
    }
    if(a[2]>a[3])
    {
        b[m-1]=a[2];
        b[m]=a[3];
    }
    else
    {
        b[m]=a[2];
        b[m-1]=a[3];
    }
    for(i=1;i<=m;i++)
    {
        printf("%d ",b[i]);
    }


}

0 0
原创粉丝点击