需要协助JAVA quicksort递归

时间:2015-10-11 17:35:11

标签: java recursion

对于学校,我必须为一个字符串数组写一个快速排序。我认为我的分区很好但是我一直收到错误的递归。

public static int partition(String[] input, int max) {
    // pivot is dividing point
    // I keeps track of lesser values
    // count is just a counter
    // Pivots in place
    int pivot = 0;
    int i = 1;
    int count = 1;

    while (count <= max) {
        if (input[count].compareTo(input[pivot]) < 0) {
            input[i] = input[count];
            i = i + 1;
        }
        if (count == max) {
            input[i] = input[pivot];
            input[pivot] = input[i];
        }
        count++;
    }
    return pivot;
}

public static void qSort(String[] input) {
    int index = partition(input, input.length - 1);
    int count = 0;
    if (count < index - 1) {
        partition(input, index - 1);
    }
    if (index + 1 < count && count < input.length) {
        partition(input, input.length - 1);
    }
    count++;
}

1 个答案:

答案 0 :(得分:0)

您的实施有很多错误。首先,您始终选择枢轴作为阵列索引0处的元素。 quicksort的想法是你选择一个pivot,在它周围分割数组,然后递归地在所选枢轴周围的两个分区上应用quicksort。如何识别您将以递归方式调用quicksort的分区的开始和结束?您需要将这些作为参数传递给您的分区方法,就像其他人在评论中提到的那样,对于quicksort方法本身也是如此。

10/206381035675/1444667249719

显然,这不是选择枢轴的最佳方式,因为某些阵列会使算法的性能非常差。一种更好的方法是每次都使用随机数据。