运行 执行随机快速排序的时间错误
run time error with respect to execution of randomized quicksort
我正在尝试实现随机版本的快速排序。我已经成功使用了普通版本的快速排序,但现在 g++ 编译器说浮点异常(核心已转储)。我该如何进行?
#include<bits/stdc++.h>
using namespace std;
void qsort(int* a,int start,int end);
int part(int*a,int start, int end);
int main()
{
int i,n;
cout<<"enter no of elements...."<<endl;
cin>>n;
int a[n];
cout<<"enter the elements to be sorted"<<endl;
for(i=0;i<n;i++)
cin>>a[i];
int start=0;
qsort(a,start,n-1);
cout<<"the list is..";
for(i=0;i<n;i++)
cout<<a[i]<<' ';
return 0;
}
void qsort(int* a,int start,int end)
{
if(end>start)
{
int pi=part(a,start,end);
qsort(a,start,pi-1);
qsort(a,pi+1,end);
}
}
int part(int*a,int start, int end)
{
int pi,pivot,k;
int i=start+rand()%(start+end-1);
pi=start;
pivot=a[i];
int j,t;
for(j=start;j<end;j++)
{
if(a[j]<=pivot)
{
t=a[j];
a[j]=a[pi];
a[pi]=t;
pi++;
}
}
t=a[i];
a[i]=a[pi];
a[pi]=t;
return pi;
}
but now the g++ compiler says floating point exception (core dumped)
不,编译器没有这么说,实际程序是这么说的,因为它正在崩溃。您应该 运行 通过 gdb
或类似的方式来代替。如果你这样做,你会得到这样的东西:
Program received signal SIGFPE, Arithmetic exception.
0x0000000000400bf2 in part(int*, int, int) ()
(gdb) bt
#0 0x0000000000400bf2 in part(int*, int, int) ()
#1 0x0000000000400b9c in qsort(int*, int, int) ()
#2 0x0000000000400bb6 in qsort(int*, int, int) ()
#3 0x0000000000400b0d in main ()
(gdb)
所以问题出在part
函数中。
最明显的嫌疑是 int i=start+rand()%(start+end-1);
正如评论中指出的那样,如果除数是 0
你会崩溃。就靠你们自己想办法了。
我正在尝试实现随机版本的快速排序。我已经成功使用了普通版本的快速排序,但现在 g++ 编译器说浮点异常(核心已转储)。我该如何进行?
#include<bits/stdc++.h>
using namespace std;
void qsort(int* a,int start,int end);
int part(int*a,int start, int end);
int main()
{
int i,n;
cout<<"enter no of elements...."<<endl;
cin>>n;
int a[n];
cout<<"enter the elements to be sorted"<<endl;
for(i=0;i<n;i++)
cin>>a[i];
int start=0;
qsort(a,start,n-1);
cout<<"the list is..";
for(i=0;i<n;i++)
cout<<a[i]<<' ';
return 0;
}
void qsort(int* a,int start,int end)
{
if(end>start)
{
int pi=part(a,start,end);
qsort(a,start,pi-1);
qsort(a,pi+1,end);
}
}
int part(int*a,int start, int end)
{
int pi,pivot,k;
int i=start+rand()%(start+end-1);
pi=start;
pivot=a[i];
int j,t;
for(j=start;j<end;j++)
{
if(a[j]<=pivot)
{
t=a[j];
a[j]=a[pi];
a[pi]=t;
pi++;
}
}
t=a[i];
a[i]=a[pi];
a[pi]=t;
return pi;
}
but now the g++ compiler says floating point exception (core dumped)
不,编译器没有这么说,实际程序是这么说的,因为它正在崩溃。您应该 运行 通过 gdb
或类似的方式来代替。如果你这样做,你会得到这样的东西:
Program received signal SIGFPE, Arithmetic exception.
0x0000000000400bf2 in part(int*, int, int) ()
(gdb) bt
#0 0x0000000000400bf2 in part(int*, int, int) ()
#1 0x0000000000400b9c in qsort(int*, int, int) ()
#2 0x0000000000400bb6 in qsort(int*, int, int) ()
#3 0x0000000000400b0d in main ()
(gdb)
所以问题出在part
函数中。
最明显的嫌疑是 int i=start+rand()%(start+end-1);
正如评论中指出的那样,如果除数是 0
你会崩溃。就靠你们自己想办法了。