提示核心已转储,但没找出来(ubuntu下)
水手一枚 2012-09-26 09:51:07 我想写一个归并排序的程序,但没想到出现这种问题,请各位前辈帮忙找一下错误。以下是我的代码:
#include<iostream>
#include<cstdio>
using namespace std;
void merge(int *,int,int,int);
void merge_sort(int *,int);
int main()
{
int i,n;
while((scanf("%d",&n))!=-1 && n>0)
{
int *data=new int[n];
for(i=0;i<n;++i)
scanf("%d",data+i);
merge_sort(data,n);
for(i=0;i<n;++i)
printf("%d ",data[i]);
printf("\n");
delete []data;
}
return 0;
}
void merge(int *A,int p,int q,int r)
{
int *bp=new int[r-q+1];
int i,j,k;
i=p,j=q+1,k=0;
while(i<=q && j<=r)
{
if(A[i]<=A[j])
bp[k++]=A[i++];
else
bp[k++]=A[j++];
}
if(i==q+1)
while(j<=r)
bp[k++]=A[j++];
else
while(i<=q)
bp[k++]=A[i++];
k=0;
for(i=p;i<=r;)
A[i++]=bp[k++];
delete []bp;
}
void merge_sort(int *A,int n)
{
int i,s,t=1;
while(t<n)
{
s=t; t=2*s; i=0;
while(i+t<n)
{
merge(A,i,i+s-1,i+t-1);
i+=t;
}
if(i+s<n)
merge(A,i,i+s-1,n-1);
}
}