gpt4 book ai didi

java - 创建没有递归和堆栈的快速排序

转载 作者:搜寻专家 更新时间:2023-10-31 20:19:10 25 4
gpt4 key购买 nike

我的任务是用 Java 编写快速排序(仅在正数上)算法(我不能使用任何导入,但 Scanner)但没有递归和堆栈。
我有两个问题:

  1. 我了解堆栈和递归版本的迭代快速排序,但我无法想象没有它该怎么做。我听说过一些“就地”实现,但我不太明白 - 它能解决我的问题吗?
    如果有人能告诉我一种方法(如果可以,请不要发布实现,我只是想理解它而不是复制某人的代码)或推荐一些我能找到的书(或一些类似的问题),我将不胜感激。<
  2. 对一些小数组实现插入排序是个好主意吗?如果是这样,这段代码中的 N 应该有多大:

    if (arraySize < N)
    insertionSort
    else
    quickSort
    fi

最佳答案

显然我的任务是找到唯一正数,这是我的解决方案:

public static void quickSort(final int size) {
int l = 0;
int r = size - 1;
int q, i = 0;
int tmpr = r;
while (true) {
i--;
while (l < tmpr) {
q = partition(l, tmpr);
arr[tmpr] = -arr[tmpr];
tmpr = q - 1;
++i;
}
if (i < 0)
break;
l++;
tmpr = findNextR(l, size);
arr[tmpr] = -arr[tmpr];
}
}

private static int findNextR(final int l, final int size) {
for (int i = l; i < size; ++i) {
if (arr[i] < 0)
return i;
}
return size - 1;
}

private static int partition(int l, int r) {
long pivot = arr[(l + r) / 2];
while (l <= r) {
while (arr[r] > pivot)
r--;
while (arr[l] < pivot)
l++;
if (l <= r) {
long tmp = arr[r];
arr[r] = arr[l];
arr[l] = tmp;
l++;
r--;
}
}
return l;
}

我要排序的数组是我类(class)中的静态数组。它基于查找和创建负数。分区是通过使用数组中的中间元素创建的,但使用中位数也很好(它取决于数组)。我希望有人会发现这很有用。

关于java - 创建没有递归和堆栈的快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29987995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com