我有一个任务要用Java(仅在posivite编号上)编写quicksort(仅在posivite编号上)算法(除了Scanner,我不能使用任何导入),但是没有递归并且没有堆栈。
我有两个问题:
通过插入一些小的数组来实现排序是个好主意吗?如果是这样,则此代码中的N应该有多大:
if (arraySize < N)
insertionSort
else
quickSort
fi
Run Code Online (Sandbox Code Playgroud)显然我的任务是只找到正数,这是我的解决方案:
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;
}
Run Code Online (Sandbox Code Playgroud)
我要排序的数组是我班级中的静态数组。它基于查找和创建负数。分区是通过使用数组中的中间元素创建的,但使用中位数也不错(这取决于数组)。我希望有人会发现这很有用。
| 归档时间: |
|
| 查看次数: |
9629 次 |
| 最近记录: |