| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 704 人关注过本帖
标题:堆排序~
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏
 问题点数:0 回复次数:1 
堆排序~
好像很久没有看排序部分了~这个好像有点难懂~还是先发发代码~~

程序代码:
#include<stdio.h>
#include<stdlib.h>

#define MAX 255

int R[MAX]={0};

void Heapify(int s,int m);
void BuildHeap(int n);
void Heap_Sort(int n);

int main()
{
    int i=0;
    int n=0;

    puts("Please input total element number of the sequence:");
    scanf("%d",&n);

    if (n<=0||n>MAX)
    {
        printf("n must more than 0 and less than %d.\n",MAX);
        exit(0);
    }

    puts("Please input the elements one by one:");
    for (i=1;i<=n;++i)
        scanf("%d",&R[i]);

    puts("The sequence you input is:");
    for (i=1;i<=n;++i)
        printf("%4d",R[i]);

    Heap_Sort(n);

    puts("\nThe sequence after Big head_sort is:");
    for (i=1;i<=n;++i)
        printf("%4d",R[i]);

    puts("");

    return 0;
}

void Heapify(int s,int m)
{
    /*对R[1..n]进行堆调整,用temp做暂存单元*/
    int j=2*s;             
    int temp=R[s];

    while (j<=m)
    {
        if (R[j]>R[j+1]&&j<m)
            j++;

        if (temp<R[j])
            break;

        R[s]=R[j];
        s=j;
        j*=2;
    }

    R[s]=temp;
}

void BuildHeap(int n)
{
    /*由一个无序的序列建成一个堆*/
    int i=0;

    for (i=n/2;i>0;--i)
        Heapify(i,n);
}

void Heap_Sort(int n)
{
    /*对R[1..n]进行堆排序,不妨用R[0]做暂存单元*/
    int i=0;

    BuildHeap(n);

    for (i=n;i>1;--i)
    {
        R[0]=R[1];     /*将堆顶和堆中最后一个元素记录交换*/
        R[1]=R[i];
        R[i]=R[0];

        Heapify(1,i-1);  /*将R[1..i-1]重新调整为堆,仅有R[1]可能违反堆性质*/
    }


}
2017-03-21 22:07
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
    puts("\nThe sequence after Big head_sort is:");

嘿嘿~看了很久~突然发现货不对板本例应该是个小顶堆~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-22 01:51
快速回复:堆排序~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017800 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved