Я реализую кучу minmax с c ++ в netbeans, но получаю странную ошибку.Кто-нибудь помогите, спасибо!оператор heap [0] = heap [length-1];получить ошибку сегмента, но я могу получить доступ как к элементу в 0, так и (length-1).
int MinMaxHeap::deleteMin(){
assert(length>0);
int min= heap[0];
heap[0]=heap[length-1];
length--;
int id=0,gid=4*id+3;
while(gid<length){
int i,cmin=heap[gid],cmin_idx=gid;
for(i=0;i<4;i++){
if(gid>(length-1))
break;
if(heap[gid]<cmin){
cmin=heap[gid];
cmin_idx=gid;
}
gid++;
}
swap(heap[id],heap[cmin_idx]);
id=cmin_idx;
gid=4*id+3;
}
int sid1=2*id+1,sid2=sid1+1,cmin,cmin_idx;
if(sid1<length){
cmin=heap[sid1];
cmin_idx=sid1;
if(sid2<length){
if(heap[sid2]<heap[sid1]){
cmin=heap[sid2];
cmin_idx=sid2;
}
}
if(heap[id]>cmin)
swap(heap[id],heap[cmin_idx]);
}
return min;
}
объявление класса:
class MinMaxHeap {
public:
MinMaxHeap(int size);
virtual ~MinMaxHeap();
int findMin();
int findMax();
int deleteMin();
int deleteMax();
bool insert(int x);
private:
int getLevel(int i); //get the level of the ith element
void swap(int&,int&);
int length; //current no. of elements of heap
int size; //heap size
int *heap; //the heap array
};