c++ - 与执行随机快速排序相关的运行时错误

标签 c++ c arrays c++11 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你会崩溃的。由你来解决。

关于c++ - 与执行随机快速排序相关的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335690/

相关文章:

c++ - 将字符串设置为 v8 数组

c - 为什么Linux-arm中system(cmd)函数需要用&background参数设置命令字符串

arrays - 在 Rust 中将数组值推送到向量

c++ - 是不是一个进程可以给自己发送数据?使用 MPICH2

c++ - 关于如何在具有单个参数的变体构造中选择替代方案?

c++ - 覆盖动态分配的内存-C++

c - 这种分配风格是否定义明确?

c - 在 Linux 中获取自 1984 年 1 月 1 日午夜以来的绝对时间

java - 返回本地初始化的数组是否可以,如果不能,我该怎么做?

ios - 没有更多上下文,表达式类型不明确。 xcode 快速