Vector heapify函数中的向量下标超出范围错误 #包括 #包括 #包括 #包括 使用名称空间std; void heapsort(向量和输入,整数计数){ } int max_v(int树[]){ int结果; 结果=树[0]; for(int i=0;iresult){ 结果=树[i]; } } 返回结果; } 布尔判断(向量和输入,整数计数){ int j=0; int启动; 双亲=0; 双lchild; 双拱门; int树[3]; int max; 双i; 对于(i=0;icount-1){i++;} 如果(rchild>count-1){i++;} 树[0]=输入[parent]; 树[1]=输入[lchild]; 树[2]=输入[rchild]; max=max_v(树); 如果(输入[parent]!=max){j++;} } 如果(j==0){返回true;} 返回false; } void heapify(向量和输入,整数计数){ 双亲=0; 双lchild; 双拱门; int树[3]; int max; 双i=0; while(判断(输入,计数)=false){ 对于(i=0;icount-1){i++;} 如果(rchild>count-1){i++;} 树[0]=输入[parent]; 树[1]=输入[lchild]; 树[2]=输入[rchild]; max=max_v(树); if(input[lchild]==max){swap(input[parent],input[lchild]);} if(input[rchild]==max){swap(input[parent],input[rchild]);} } } } int main(){ 整数计数; int tmp; cin>>计数; 矢量输入; 对于(inti=0;i>tmp; 输入。推回(tmp); } cout
您的Vector heapify函数中的向量下标超出范围错误 #包括 #包括 #包括 #包括 使用名称空间std; void heapsort(向量和输入,整数计数){ } int max_v(int树[]){ int结果; 结果=树[0]; for(int i=0;iresult){ 结果=树[i]; } } 返回结果; } 布尔判断(向量和输入,整数计数){ int j=0; int启动; 双亲=0; 双lchild; 双拱门; int树[3]; int max; 双i; 对于(i=0;icount-1){i++;} 如果(rchild>count-1){i++;} 树[0]=输入[parent]; 树[1]=输入[lchild]; 树[2]=输入[rchild]; max=max_v(树); 如果(输入[parent]!=max){j++;} } 如果(j==0){返回true;} 返回false; } void heapify(向量和输入,整数计数){ 双亲=0; 双lchild; 双拱门; int树[3]; int max; 双i=0; while(判断(输入,计数)=false){ 对于(i=0;icount-1){i++;} 如果(rchild>count-1){i++;} 树[0]=输入[parent]; 树[1]=输入[lchild]; 树[2]=输入[rchild]; max=max_v(树); if(input[lchild]==max){swap(input[parent],input[lchild]);} if(input[rchild]==max){swap(input[parent],input[rchild]);} } } } int main(){ 整数计数; int tmp; cin>>计数; 矢量输入; 对于(inti=0;i>tmp; 输入。推回(tmp); } cout,vector,heapsort,Vector,Heapsort,您的heapify()函数中的for循环的终止条件不正确。循环将继续通过与您的原型堆的叶节点对应的索引,并尝试将其子项提取为index[lchild]和index[rchild]。或者实际上只是前者,因为这就是发生下标冲突的地方 还有,你到底为什么要使用doubles作为计数器和索引?你应该使用整数类型。int将是默认选择。结果将更清晰,速度略快,你将能够避免floor()全部功能。哦,天哪,你必须先修正缩进。不要用制表符缩进。尤其不要用制表符和空格混合缩进。 #include<iostr
heapify()
函数中的for
循环的终止条件不正确。循环将继续通过与您的原型堆的叶节点对应的索引,并尝试将其子项提取为index[lchild]
和index[rchild]
。或者实际上只是前者,因为这就是发生下标冲突的地方
还有,你到底为什么要使用
double
s作为计数器和索引?你应该使用整数类型。int
将是默认选择。结果将更清晰,速度略快,你将能够避免floor()
全部功能。哦,天哪,你必须先修正缩进。不要用制表符缩进。尤其不要用制表符和空格混合缩进。
#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();
}