| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 332 人关注过本帖
标题:高手们 帮帮忙 heap-sort 中的 heapEXTRACT这个函数 (去掉最大的那个元素) ...
只看楼主 加入收藏
lixisha1110
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-10-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
高手们 帮帮忙 heap-sort 中的 heapEXTRACT这个函数 (去掉最大的那个元素)不工作啊
#include <stdio.h>
#include <malloc.h>

void min_heapify(int* array, int i, int len)
{
    int l,r,min;
int temp;
l=2*i+1;
r=2*i+2;
if(l<len && array[l]<array[i])
min = l;
else
min = i;
if(r<len && array[r]<array[min])
min = r;
if(min != i)
{
    temp = array[min];
    array[min] = array[i];
array[i] = temp;
min_heapify(array,min,len);
}
}


void Build_min_heap(int *array,int len)
{
int i;
for(i=len/2;i>=0;i--)
{
min_heapify(array,i,len);
}
}


void Heapsort(int *array, int len)
{
int i,temp;
Build_min_heap(array,len);
for(i=len-1;i>=0;i--)
{
temp = array[0];
array[0] = array[i];
array[i] = temp;
len--;
min_heapify(array,0,len);
}
}


void max_heapify(int* array, int i, int len)
{
    int l,r,largest;
int temp;
l=2*i+1;
r=2*i+2;
if(l<len && array[l]>array[i])
largest = l;
else
largest = i;
if(r<len && array[r]>array[largest])
largest = r;
if(largest != i)
{
    temp = array[largest];
    array[largest] = array[i];
array[i] = temp;
max_heapify(array,largest,len);
}
}


int heapEXTRACT(int A[],int len){
int max=A[0];
len=len-1;
if(len=0) {printf("heap underflow\n");return 0;}
A[0]=A[len];
len--;
max_heapify(A,0,len);
return max;
}


int main(void)
{
int num_1;
int num_2;
int *arr;
int i;
scanf("%d %d",&num_1,&num_2);
arr=(int*)malloc(sizeof(int)*num_1);
for(i=0;i<num_1;i++)
{
scanf("%d",&arr[i]);
}
Heapsort(arr,num_1);
heapEXTRACT(arr,num_1);//不工作!!!!!
heapEXTRACT(arr,num_1);//不工作!!!!!
for(i=0;i<=num_1-1;i++)//还是全部显示。。。
{
printf("%d ",arr[i]);
}
scanf("%d",&i);
}

[ 本帖最后由 lixisha1110 于 2012-10-14 16:09 编辑 ]
搜索更多相关主题的帖子: include 最大的 元素 
2012-10-14 15:48
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
Ding~
2012-10-15 16:35
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
自己试着研究一下吧,谁在练习各种排序的时候都会出很多错误的。尤其堆排的原理本来就比其它几种排序略复杂。
2012-10-16 08:32
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
如果实在查不出,就找一个正确的代码对比一下区别。然后从中分析出自己的问题。
2012-10-16 08:36
快速回复:高手们 帮帮忙 heap-sort 中的 heapEXTRACT这个函数 (去掉最大的那个 ...
数据加载中...
 
   



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

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