Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
runtime error我自己写了一个堆排序算法,竟然runtime error,求大神帮忙啊! #include<iostream> using namespace std; void create(int a[],int n,int m) { int i; for(i=m; i>=1; i--) { int min=i; if(a[2*i]<a[i] && 2*i<=n) min=2*i; if(a[2*i+1]<a[min] && 2*i+1<=n) min=2*i+1; if(min!=i) { int temp=a[i]; a[i]=a[min]; a[min]=temp; create(a,n,min); } } } void delet(int a[],int *p) { (*p)--; int n=*p,i,m,pre=0,j; m=a[n+1]; for(i=1; i<=n/2;) { j=2*i; int min=j;//选取两个子结点的最小值 if(a[j+1]<a[min] && j+1<=n) min=j+1; if(a[min]<m) { a[i]=a[min]; i=min; } else { a[i]=m; pre=1; break; } } if(pre==0) a[i]=m; return ; } void add(int a[],int *p,int s) { (*p)++; int n=*p,i,j,pre=0; if(n==1) { a[n]=s; return ; } for(i=n; i>=2;) { j=i/2; if(a[j]>s)//小的话就向前放 { a[i]=a[j]; i=j; } else { a[i]=s; pre=1; break; } } if(pre==0) a[j]=s; return ; } int main() { int n,a[20005],i; cin>>n; for(i=1; i<=n; i++)//足够长没有说刚好的 cin>>a[i]; create(a,n,n/2);//创建堆栈 int p,q; __int64 sum=0; if(n==1) sum=a[1]; else { while(n>1) { q=a[1]; delet(a,&n); p=a[1]; delet(a,&n); sum+=q+p; add(a,&n,p+q); } } printf("%I64d\n",sum); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator