【发布时间】:2018-11-08 01:25:15
【问题描述】:
我正在尝试按降序实现快速排序。我试图追踪我的代码,看看为什么它只是部分排序。我的输入是一个 int 数组:{3,4,6,1,9,7}。排序后得到{9,4,7,6,3,1},其中4的位置不对。
public int partition(int arr[], int left, int right)
{
int pivot = arr[right];
int i = left - 1;
for(int j = right; j >= left; j--)
{
if (arr[j] > pivot)
{
i = i + 1;
int temp = arr[i];
arr[i]= arr[j];
arr[j]= temp;
}
}
int temp = arr[i+1];
arr[i+1] = arr[right];
arr[right] = temp;
return i + 1;
}
public void sorting(int arr[], int left, int right)
{
if(left < right)
{
int q = partition(arr, left, right);
sorting(arr, left, q - 1);
sorting(arr, q + 1, right);
}
}
【问题讨论】:
-
你可以看到快速排序实现的例子here它包括逻辑和代码示例的解释。
-
对于这样的问题,拿笔和纸并明确地写下你的算法在做什么是非常有用的,你最终会看到发生了什么。
-
这是一种分区方式。这不是一种排序方法。排序方法在哪里?
-
@LouisWasserman 请查看更新后的帖子,我已经跟踪了我的代码但仍然不明白。