排序实现 - 存在数组元素但返回-1

时间:2017-12-02 18:40:17

标签: java arrays sorting indexof

我正在努力实现我自己的QuickSort方法,但是我无法在我的分区方法中返回第一个和最后一个出现的索引。我已逐行调试代码,这显示..... enter image description here

很明显,元素存在于数组中,但索引总是返回-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);

}
}

1 个答案:

答案 0 :(得分:0)

Arrays.asList的签名要求对象的varargs或对象数组。 int[]不是对象数组,Java不会将其自动装箱到Integer[]。因此它被视为vararg,因此你得到List<int[]>

相关问题