我的堆排序哪里出问题了啊

xiaolomg 2010-07-07 07:52:47
#include<iostream>
using namespace std;
void max_heapify(int *a,int heap_size,int i){
int l=2*i,r=l+1,largest=0;
if(l<heap_size&&a[l]>a[i]){
largest=l;
}
else
largest=i;
if(r<heap_size&&a[r]>a[largest])
largest=r;
if(largest!=i){
int tmp=a[i];
a[i]=a[largest];
a[largest]=tmp;
max_heapify(a,heap_size,largest);
}
}
void build_max_heap(int *a){
int heap_size = sizeof(a)/sizeof(*a);
for(int i=heap_size/2-1;i>=0;--i){
max_heapify(a,heap_size,i);
}
}

int main(){
int a[]={14,2,8,7,16,1,4,9,3,10};
build_max_heap(a);
for(int i=0;i<sizeof(a)/sizeof(*a);++i)
printf("%d ",a[i]);
//system("pause");
}

求解释,
...全文
106 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolomg 2010-07-07
  • 打赏
  • 举报
回复
多谢啊,就是这个问题,分全给你了
BlueMap 2010-07-07
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
void max_heapify(int *a,int heap_size,int i){
int l=2*i,r=l+1,largest=0;
if(l<heap_size&&a[l]>a[i]){
largest=l;
}
else
largest=i;
if(r<heap_size&&a[r]>a[largest])
largest=r;
if(largest!=i){
int tmp=a[i];
a[i]=a[largest];
a[largest]=tmp;
max_heapify(a,heap_size,largest);
}
}
void build_max_heap(int *a){
int heap_size = sizeof(a)/sizeof(*a);//此时a已经退化为指针sizeof(a)=4,sizeof(*a)=4。heap_size =1所以程序不会进下面的循环
for(int i=heap_size/2-1;i>=0;--i){
max_heapify(a,heap_size,i);
}
}

int main(){
int a[]={14,2,8,7,16,1,4,9,3,10};
build_max_heap(a);
for(int i=0;i<sizeof(a)/sizeof(*a);++i)
printf("%d ",a[i]);
//system("pause");
}

70,034

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧