堆排RE20求调
查看原帖
堆排RE20求调
731974
zxm_楼主2023/2/13 20:07

rt

Runtime Error. Received signal 11: Segmentation fault with invalid memory reference.

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
long long heap[50000]={};
long long heapPointer=1;

void up(int operPointer){
	//cout<<"upping "<<operPointer<<" which has a value "<<heap[operPointer]<<"......\n";
	if(heapPointer>=1 and heap[operPointer]<heap[operPointer/2]){
		int k;
		k=heap[operPointer];
		heap[operPointer]=heap[operPointer/2];
		heap[operPointer/2]=k;
		operPointer=operPointer/2;
		//cout<<"upped to"<<operPointer<<" which has a value "<<heap[operPointer]<<"\n";
		//cout<<"now the heap looks like:";
		for(int i=1;i<=10;i++){
			//cout<<heap[i];
		}//cout<<endl;
		up(operPointer);
	}else{
	//	cout<<"now the heap looks like:";
		for(int i=1;i<=10;i++){
			//cout<<heap[i];
		}//cout<<endl;
		return;
	}
}
void down(int p=1){
	if( (heap[p]>heap[p*2] or heap[p]>heap[p*2+1] ) and p>=1){
		if(heap[p*2]>heap[p*2+1]){
			swap(heap[p],heap[p*2+1]);
			p=p*2+1; 
		}
		if(heap[p*2]<heap[p*2+1]){
			swap(heap[p],heap[p*2]);
			p=p*2;
		}
		down(p);
	}
	else{
		return; 
	} 
}
void insrt(int val){
	//cout<<"inserting "<<heapPointer<<" which has a value "<<val<<"......\n";
	heap[heapPointer]=val;
	up(heapPointer);
	heapPointer++;
	

}
void eject(){
	swap(heap[1],heap[heapPointer--]);
	int cur=1;
	while(cur*2<=heapPointer){
		int son=cur*2;
		if(son+1<=heapPointer && heap[son+1]<heap[son])son++;
		if(heap[cur]<heap[son])break;
		swap(heap[cur],heap[son]);
		cur=son;
	}
	return ;
}
int main(){
	int n,e;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>e;
		insrt(e);
	}/*
	for(int i=1;i<=20;i++){
			cout<<heap[i];
	}cout<<endl;*/
	while(heapPointer){ 
		if(heap[1]!=0)cout<<heap[1]<<" ";
		eject();
	}
}
2023/2/13 20:07
加载中...