【发布时间】:2018-11-22 19:53:58
【问题描述】:
我正在遵循以下伪代码:
function quicksort(array)
if length(array) > 1
pivot := select any element of array
left := first index of array
right := last index of array
while left ≤ right
while array[left] < pivot
left := left + 1
while array[right] > pivot
right := right - 1
if left ≤ right
swap array[left] with array[right]
left := left + 1
right := right - 1
quicksort(array from first index to right)
quicksort(array from left to last index)
但是当我尝试在 java 中实现它时,我插入了代码:
import java.util.Arrays;
public class ALGQuickSort {
public static void main(String[] args) {
int[] array = {6, 3, 4, 8, 9, 10, 1};
quickSort(array);
System.out.println(Arrays.toString(array));
}
public static void quickSort(int[] array) {
int pivot = array[array.length - 1];
if (array.length > 1) {
int left = 0;
int right = array.length - 1;
while (left <= right) {
while (array[left] < pivot) {
left++;
}
while (array[right] > pivot) {
right--;
}
if (left <= right) {
swap(array[left], array[right]);
right--;
left++;
}
int[] array1 = Arrays.copyOfRange(array, 0, right);
int[] array2 = Arrays.copyOfRange(array, left, array.length - 1);
quickSort(array1);
quickSort(array2);
}
}
}
public static void swap(int a, int b) {
int aux = a;
a = b;
b = aux;
}
}
系统在屏幕上显示以下错误:
线程“主”java.lang.IllegalArgumentException 中的异常:5 > 4 在 java.util.Arrays.copyOfRange(Arrays.java:3591) 在 alg.quicksort.ALGQuickSort.quickSort(ALGQuickSort.java:43) 在 alg.quicksort.ALGQuickSort.quickSort(ALGQuickSort.java:44) 在 alg.quicksort.ALGQuickSort.main(ALGQuickSort.java:21) C:\Users\Alex\AppData\Local\NetBeans\Cache\8.2\executor-sn-ps\run.xml:53: Java 返回:1
错误在以下行:
int[] array2 = Arrays.copyOfRange(array, left, array.length - 1);
有人可以帮帮我吗?
【问题讨论】:
-
请阅读 Eric Lippert 的 "How to debug small programs"。
-
你能发布完整的错误吗?
-
@pavlos163 我更新了!!
-
您正在围绕数组进行复制,而不是在内存中的单个集合上进行旋转。这使您的索引无法正常工作。该错误告诉您无法从索引 5 复制到索引 4,因为 5 大于 4。
标签: java algorithm sorting quicksort