请有人解释一下为什么这个快速排序代码没有按预期工作
please can someone explain me why this quick sort code is not working as expected
我第一次在没有看到任何代码的情况下仅通过动画进行了快速排序,但是解决方案不是我所期望的。谁能告诉我我在这段代码中做错了什么?因为按照我的说法,算法应该有效,但它不起作用。请指出我的错误。如果可以的话会很有帮助。
我的代码
#include<iostream>
using namespace std;
void printArray(int arr[]){
for(int i = 0 ;i<8;i++){
cout<<arr[i]<<endl;
}
}
void swap(int *xp, int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
int partioner(int array[],int low, int high){
int k = low;
int piv =array[0];
int i =low+1;
int j =high;
while(j>i){
while(piv<array[j]){
j--;}
while(piv>array[i]){
i++;}
if(i<j){
swap(&array[i],&array[j]);}}
swap(&array[low],&array[j]);
return j;
}
void quickSort(int array[],int low,int high)
{
if(low<high){
int loc=partioner(array,low,high);
quickSort(array,low,loc-1);
quickSort(array,loc+1,high);
}
}
int main(){
int array[] = {8,7,6,5,4,3,2,1};
quickSort(array,0,7);
printArray(array);
}
在您的 partioner()
函数中,它应该是:
int piv = array[low];
而不是:
int piv = array[0];
进一步阅读:Quick sort - Geeksforgeeks
旁注:如果您使用的是 C++,也许可以看看 sort()
:sort() - cplusplus.com
我第一次在没有看到任何代码的情况下仅通过动画进行了快速排序,但是解决方案不是我所期望的。谁能告诉我我在这段代码中做错了什么?因为按照我的说法,算法应该有效,但它不起作用。请指出我的错误。如果可以的话会很有帮助。
我的代码
#include<iostream>
using namespace std;
void printArray(int arr[]){
for(int i = 0 ;i<8;i++){
cout<<arr[i]<<endl;
}
}
void swap(int *xp, int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
int partioner(int array[],int low, int high){
int k = low;
int piv =array[0];
int i =low+1;
int j =high;
while(j>i){
while(piv<array[j]){
j--;}
while(piv>array[i]){
i++;}
if(i<j){
swap(&array[i],&array[j]);}}
swap(&array[low],&array[j]);
return j;
}
void quickSort(int array[],int low,int high)
{
if(low<high){
int loc=partioner(array,low,high);
quickSort(array,low,loc-1);
quickSort(array,loc+1,high);
}
}
int main(){
int array[] = {8,7,6,5,4,3,2,1};
quickSort(array,0,7);
printArray(array);
}
在您的 partioner()
函数中,它应该是:
int piv = array[low];
而不是:
int piv = array[0];
进一步阅读:Quick sort - Geeksforgeeks
旁注:如果您使用的是 C++,也许可以看看 sort()
:sort() - cplusplus.com