我有一个任务是在Java中编写快速排序(仅限posivite数字)algorythm(我不能使用任何导入但是使用Scanner)但没有递归和没有堆栈。
我有两个问题:
通过插入一些小型数组实现排序是一个好主意吗?如果是这样,代码中N应该有多大:
if (arraySize < N)
insertionSort
else
quickSort
fi
答案 0 :(得分:3)
显然我的任务是找到唯一正面数字,这是我的解决方案:
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;
}
我要排序的数组是我班级中的静态数组。 它基于查找和创建负数。 分区是通过在数组中使用中间元素创建的,但使用中位数也很好(它取决于数组)。 我希望有人会发现这很有用。
答案 1 :(得分:1)
Just as a reference the Java8 implementation of Arrays.sort(int[]) uses a threshold of 47, anything less than that is sorted using insertion. Their quick sort implementation is however very complex with some initial overhead, so look upon 47 as an upper limit.
答案 2 :(得分:-1)
Google&#34;非递归快速排序&#34;产生了大量答案......包括这一个:Non recursive QuickSort&#34;您的语言可能会有所不同,&#34;但基本原则不会。
我个人认为,如果您要对某些内容进行排序,您可以在所有情况下使用Quicksort。 。 。
当然,除非您可以在您喜欢的目标语言中使用sort()
函数,并将其留给语言实现者选择一个聪明的算法(嗯,它可能是Quicksort ......)给你。如果您没有 来指定执行此类常规任务的算法,那么就不要这样做!&#34;不要!&#34; : - )