我正在努力实现我自己的QuickSort方法,但是我无法在我的分区方法中返回第一个和最后一个出现的索引。我已逐行调试代码,这显示.....
很明显,元素存在于数组中,但索引总是返回-1,表明它们不存在于数组中。
以下是我的代码的样子......你能说出为什么会这样吗?
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.Arrays;
public class Quicksort {
public static void sort(int[] arr) {
int first = arr[0];
int last = arr[arr.length - 1];
quickSort(arr, first, last);
}
private static void quickSort(int[] arr, int first, int last) {
if (first < last) {
int pivot = partition(arr, first, last);
quickSort(arr, first, pivot - 1);
quickSort(arr, pivot + 1, last);
}
}
private static int partition(int[] arr, int first, int last) {
int pivot = first;
int up = Arrays.asList(arr).indexOf(first);
int down = Arrays.asList(arr).indexOf(last);
System.out.println(up);
System.out.println(down);
do {
if (arr[up] < pivot || arr[up] != last) {
up++;
}
if (arr[down] > pivot || arr[down] != first) {
down--;
}
if (up > down) {
int temp = arr[up];
arr[up] = arr[down];
arr[down] = temp;
}
} while (up < down);
int temp = arr[down];
int pivotIndex = java.util.Arrays.asList(arr).indexOf(pivot);
arr[down] = arr[pivotIndex];
arr[pivotIndex] = temp;
return pivot;
}
public static void printArr(int[] arr) {
System.out.println(IntStream.of(arr)
.boxed()
.map(Object::toString)
.collect(Collectors.joining(", ")));
}
public static void main(String[] args) {
int[] arr = {5, 14, 30, 2, 40, 14};
printArr(arr);
sort(arr);
printArr(arr);
}
}
答案 0 :(得分:0)
Arrays.asList
的签名要求对象的varargs或对象数组。 int[]
不是对象数组,Java不会将其自动装箱到Integer[]
。因此它被视为vararg,因此你得到List<int[]>
。