任何人都可以帮助找到以下快速排序代码中的错误,它显示分段错误(SIGSEGV)
Can anyone help in finding the errror in the following code of quicksort,its's showing Segmentation Fault (SIGSEGV)
快速排序代码
我使用了分区函数来获取主元,然后递归解决了问题,但在编译时显示分段错误。
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);
}
}
看这段代码
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);
}
}
如果 pindex
等于 start
,则 quick_sort(arr,pindex,end);
将调用具有相同参数的快速排序函数,导致堆栈溢出(ta da!!)。
快速排序的要点是枢轴元素在正确的位置,所以你递归排序除了枢轴元素之外的所有元素。
类似
int pindex = partition(arr, start, end);
quick_sort(arr, start, pindex);
quick_sort(arr, pindex + 1, end);
未测试。
void quickSort(int arr[], int low, int high)
{
如果(低 < 高)
{
/* pi 是分区索引,arr[p] 现在是
在正确的地方 */
int pi =分区(arr,低,高);
// Separately sort elements before
// partition and after partition
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
快速排序代码
我使用了分区函数来获取主元,然后递归解决了问题,但在编译时显示分段错误。
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);
}
}
看这段代码
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);
}
}
如果 pindex
等于 start
,则 quick_sort(arr,pindex,end);
将调用具有相同参数的快速排序函数,导致堆栈溢出(ta da!!)。
快速排序的要点是枢轴元素在正确的位置,所以你递归排序除了枢轴元素之外的所有元素。
类似
int pindex = partition(arr, start, end);
quick_sort(arr, start, pindex);
quick_sort(arr, pindex + 1, end);
未测试。
void quickSort(int arr[], int low, int high)
{ 如果(低 < 高) { /* pi 是分区索引,arr[p] 现在是 在正确的地方 */ int pi =分区(arr,低,高);
// Separately sort elements before
// partition and after partition
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}