快速排序实现中的分段错误
Segmentation fault in a quicksort implementation
我编写了C++代码来实现快速排序。它可以编译,但在运行时崩溃。我使用了代码块。当我使用调试器时,它说:
我分区函数定义中的第 (45) 行的"分段错误"q=Partition(r,n);"。
搜索了它并找到了一些答案,但没有一个能解决我在这里的问题。请告诉我为什么这个程序无法运行。
//Program for Quicksort
#include <iostream>
using namespace std;
int Partition(int* p,int n);
void Qsort(int* p,int n);
void Swap(int* a,int* b);
int main()
{
int n=0; //array size
cout<<"Enter array sizen";
cin>>n;
int a[n];
cout<<"Now enter the array elementsn";
for(int i=0;i<n;i++)
cin>>a[i]; //read array
int *p;
p=a;
Qsort(p,n); //call Qsort, args:pointer to
cout<<"This is the sorted array:n"; //array, array size
for(int i=0;i<n;i++)
cout<<a[i]<<" "<<endl; //print sorted array
return 0;
}
int Partition(int* p,int n) //the partition function
{
int key=*(p+n-1);
int i=-1,j=0;
for(j=0;j<n-1;j++)
{
if(*(p+j)<=key)
{
i++;
Swap(p+i,p+j);
}
}
*(p+i+1)=key;
return i+1;
}
void Qsort(int* r,int n)
{
int q=0;
q=Partition(r,n); //The debugger points here and says
Qsort(r,q); //there is a segmentation fault
Qsort(r+q+1,n-q-1);
}
void Swap(int* a,int* b) //To exchange two integer variables
{
int t=0;
t=*a;
*a=*b;
*b=t;
}
billz 的评论确切地告诉你出了什么问题,但让我试着用更简单的话来表达:
您的Qsort
一遍又一遍地调用自己,这个循环永远不会停止,直到您的计算机耗尽资源。您忘记包含将在所有操作完成后触发的退货条件。在排序例程的情况下,这通常是在单个元素上调用排序机制时:没有什么可以排序的,所以我们不妨停止。
尝试在程序中包括此条件。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?