C++ 任何人都可以帮助在下面的快速排序代码中找到错误,它是';s显示分段故障(SIGSEGV) 快速排序代码
我使用了一个分区函数来获取轴,然后递归解决了这个问题,但是在编译时它显示了分段错误C++ 任何人都可以帮助在下面的快速排序代码中找到错误,它是';s显示分段故障(SIGSEGV) 快速排序代码,c++,algorithm,sorting,segmentation-fault,quicksort,C++,Algorithm,Sorting,Segmentation Fault,Quicksort,我使用了一个分区函数来获取轴,然后递归解决了这个问题,但是在编译时它显示了分段错误 void swap(int* a,int* b) { int temp=*a; *a=*b; *b=temp; } int partition (int arr[],int start,int end) { int piviot=arr[end-1]; int pindex=start; for(int i=start;i<end-1;i++)
void swap(int* a,int* b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int partition (int arr[],int start,int end)
{
int piviot=arr[end-1];
int pindex=start;
for(int i=start;i<end-1;i++)
if(arr[i]<=piviot)
swap(&arr[i],&arr[pindex++]);
swap(&arr[end-1],&arr[pindex]);
return pindex;
}
void quick_sort(int arr[],int start,int end)
{
if(start<end)
{
int pindex=partition(arr,start,end);
quick_sort(arr,start,pindex);
quick_sort(arr,pindex,end);
}
}
无效交换(int*a,int*b)
{
int temp=*a;
*a=*b;
*b=温度;
}
整数分区(整数arr[],整数开始,整数结束)
{
int-piviot=arr[end-1];
int pindex=开始;
对于(inti=start;i请查看此代码
void quick_sort(int arr[],int start,int end)
{
if(start<end)
{
int pindex=partition(arr,start,end);
quick_sort(arr,start,pindex);
quick_sort(arr,pindex,end);
}
}
未经测试
void quickSort(int arr[], int low, int high)
{
如果(低<高)
{
/*pi是分区索引,arr[p]现在是
在正确的地方*/
int pi=分区(arr、低、高)
}在递归时,您似乎没有将枢轴从子数组中排除,这将破坏堆栈。进行第二次调用快速排序(arr,pindex+1,end)
。
void quickSort(int arr[], int low, int high)
// Separately sort elements before
// partition and after partition
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}