***CODE FOR QUICKSROT***
我已经使用了分区功能来获得虚拟机,然后通过旋转解决了问题,但是在编译时却显示出分段故障
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);
未测试。