开发者社区 问答 正文

帮忙给个简单的c语言堆排序法的程序!!

简单易懂的!!

展开
收起
知与谁同 2018-07-15 12:41:05 1598 分享 版权
1 条回答
写回答
取消 提交回答
  • void fun1(int *a,int i,int j);
    void fun(int *a)
    {int i,t;
    for(i=9/2;i>=0;i--)
    fun1(a,i,9);//排成大根堆
    for(i=9;i>0;i--)
    {t=a[0];
    a[0]=a[i];
    a[i]=t;//每次把根结点调到最后,实现由小到大
    fun1(a,0,i-1);}//根结点不是最大,继续排成大根堆
    }
    void fun1(int *a,int i,int j)
    {int k,kk;
    k=i*2;
    kk=a[i];
    while(k<=j)
    {if(a[k]<a[k+1]&&k<j)
    k++;
    if(kk<a[k])
    {a[i]=a[k];
    i=k;
    k=k*2;
    }
    else
    break;
    }
    a[i]=kk;
    }
    main()
    {int a[10],i;
    for(i=0;i<10;i++)
    {a[i]=9-i;
    printf("%d",a[i]);}
    fun(a);
    printf("\n");
    for(i=0;i<10;i++)
    printf("%d",a[i]);
    }
    我就理解到这个地步
    2019-07-17 22:50:33
    赞同 展开评论
问答分类:
问答地址: