| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 758 人关注过本帖
标题:一个大顶堆排序问题
取消只看楼主 加入收藏
a13468954732
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2010-9-25
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:0 
一个大顶堆排序问题
程序代码:
程序执行没有错误 但一运行就出错误 希望朋友帮忙看下 谢谢!!!


#include<stdio.h>
#include<stdlib.h>
#define length 6//待排序数个数

int left(int i){//i为插入位置 求i的左孩子
    return 2*i;
}
int right(int i){//右孩子
    return 2*i+1;
}
int parent(int i){//父节点
    return i/2;
}
void swap(int *a,int *b){//交换两个数的值
    int temp;
    temp=*a;*a=*b;*b=temp;
}

void max_heapify(int a[],int i,int heapsize){//将i位置调整 满足大顶堆的性质
   
    int l=left(i);
    int r=right(i);
    int largest,temp;
    if(l<=heapsize&&a[l]>a[i])
        largest=l;
    else
        largest=r;
    if(r<=heapsize&&a[r]>a[largest])
        largest=r;
    if(largest!=i){
        swap(&i,&largest);
        max_heapify(a,largest,heapsize);
    }
}

void build_max_heapify(int a[],int heapsize){//建立大顶堆
   
    int i;
    for(i=length/2;i>=1;i--)
        max_heapify(a,i,heapsize);
}

void heapsort(int a[],int heapsize){//堆排序

    int i,temp;
    build_max_heapify(a,heapsize);
    for(i=heapsize;i>=2;i--){
        temp=a[1];a[1]=a[i];a[i]=temp;
        heapsize--;
        max_heapify(a,1,heapsize);
    }
}

int main(){
    int i,a[length]={1,2,3,4,5,6};
    int heapsize=length;
    heapsort(a ,heapsize);
    for(i=1;i<=length;i++)
        printf("%d ",a[i]);
    return 0;
}



2010-10-17 20:32
快速回复:一个大顶堆排序问题
数据加载中...
 
   



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

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