【发布时间】:2020-09-20 21:01:00
【问题描述】:
我有一个大问题要修改 Hoare 分区,以便它按降序排序:首先按偶数,然后按奇数。示例:arr[] = {1, 6, 7, 8, 4, 5},输出:arr[] = {8, 6, 4, 7, 5, 1}。
我可以通过将数组分别分成偶数和奇数并分别对这些部分进行排序来做到这一点。但是,任务是重新设计快速排序,这样您就不必划分数组了。
下面我有我的分区,我的方向正确吗?
static int partition(int []arr, int low,
int high)
{
int pivot = arr[low];
int i = low - 1, j = high + 1;
while (true)
{
do
{
i++;
} while ((arr[i] > pivot && ((arr[i]%2==0 && pivot%2==0) || (arr[i]%2!=0 && pivot%2!=0))) || (arr[i]<pivot && arr[i]%2==0 && pivot%2!=0));
do
{
j--;
} while (arr[j] < pivot);
if (i >= j)
return j;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
【问题讨论】:
-
你试图解决什么问题,你在哪里遇到问题?
-
我只是用错误的方式解决了这个问题。我创建了 2 个额外的表:一个是偶数,另一个是奇数。我分别对它们进行排序并将结果复制到原始数组中。但是,任务是关于修改快速排序,所以我的方式与任务的内容不兼容。不幸的是,我不知道该怎么做。
-
分享你迄今为止尝试过的代码。
-
只需要修改排序使用的比较即可。但它不能像
a < b总是意味着“a在b之后排序”那么简单;奇偶校验(奇/偶)也很重要。现在a < b仅表示“a在b之后排序”,当a和b均为奇数或均为偶数时;但是当一个奇数另一个偶数时,偶数总是排在奇数之后, -
好的,我添加了我的代码。
标签: java arrays algorithm sorting quicksort