0
#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
using namespace std;
void heapsort(vector<int> &input,int count){
}
int max_v(int tree[]){
int result;
result=tree[0];
for(int i=0;i<3;i++){
if(tree[i]>result){
result=tree[i];
}
}
return result;
}
bool judge(vector<int> &input,int count){
int j=0;
int start;
double parent=0;
double lchild;
double rchild;
int tree[3];
int max;
double i;
for(i=0;i<count;i++){
parent=floor((i-1)/2);
lchild=2*i+1;
rchild=2*i+2;
if(lchild>count-1){i++;}
if(rchild>count-1){i++;}
tree[0]=input[parent];
tree[1]=input[lchild];
tree[2]=input[rchild];
max=max_v(tree);
if(input[parent]!=max){j++;}
}
if(j==0){return true;}
return false;
}
void heapify(vector<int> &input,int count){
double parent=0;
double lchild;
double rchild;
int tree[3];
int max;
double i=0;
while(judge(input,count)==false){
for(i=0;i<count;i++){
parent=floor((i-1)/2);
lchild=2*i+1;
rchild=2*i+2;
if(lchild>count-1){i++;}
if(rchild>count-1){i++;}
tree[0]=input[parent];
tree[1]=input[lchild];
tree[2]=input[rchild];
max=max_v(tree);
if(input[lchild]==max){swap(input[parent],input[lchild]);}
if(input[rchild]==max){swap(input[parent],input[rchild]);}
}
}
}
int main(){
int count;
int tmp;
cin>>count;
vector<int> input;
for(int i=0;i<count;i++){
cin>>tmp;
input.push_back(tmp);
}
cout<<endl;
heapify(input,count);
for(int i=0;i<count;i++){
cout<<input[i]<<" ";
}
getchar();
getchar();
}
喜,如主題所述,我發現錯誤在我heapify函數假設,以確保每個父節點具有其相應的二進制tree.The誤差的最大值爲約矢量下標超出範圍,但我無法找出哪個向量索引超出範圍。請幫助並感謝大家的幫助。矢量下標超出範圍的錯誤在heapify功能
哎呀,您必須先修復縮進。 – HuStmpHrrr 2014-08-29 17:01:45
請勿縮進選項卡。特別是不要縮進與製表符和空格的混合物。 – 2014-08-29 17:25:20