高手们 帮帮忙 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 编辑 ]