我很抱歉提出这个问题,但这个问题日复一日地变得如此痛苦
这是一个堆排序程序代码
#include<iostream>
#include<algorithm> //used for swap utility
using namespace std;
int lefty(int i) {
return 2*i+1;
}
int righty(int i) {
return 2*i+2;
}
void max_heapify(int b[],int i,int n) {
int large;
int left=lefty(i);
int right=righty(i);
if(left<=n && b[i]<b[left]) // <---- checks whether the root is less or greater than left child
large=left;
else
large=i;
if(right<=n && b[large]<b[right]) // <---- checks for right child
large=right;
if(large!=i) { //if this is not greater then place it to correct position
swap(b[i],b[large]);
max_heapify(b,large,n); //recursive calls for placing the element to appropriate position
}
}
void buildmaxheap(int* b,int n) {
for(int i=n/2;i>=0;i--) // n/2 used to optimize by checking only at half of the height
max_heapify(b,i,n);
}
void heapsort(int* b,int n) {
buildmaxheap(b,n);
int end=n-1;
while(end>0) {
swap(b[0],b[end]);
end=end-1;
max_heapify(b,0,end);
}
}
int main() {
int a[]={6,5,3,1,8,7,2,4},i;
int n=sizeof(a)/sizeof(a[0]);
heapsort(a,n);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
很抱歉发布了这么多代码但是我的mac上普通gcc编译器和编译器的输出有所不同。我已经安装了xcode命令行工具,提供了llvm-gcc,gcc,clang等。
mac上的输出类似于2 3 4 5 6 7 8 1644757086 &lt; -------垃圾或随机(我不知道)
当我运行任何程序时,这不仅仅是一次多次在Mac上损坏了值,但它对gcc上的任何输入都有效 看看http://ideone.com/Psubk2 请帮助澄清这一点并建议良好的调试工具,因为在中级我发现GDB有点时间