quickSort - StackOverflowException

时间:2013-02-15 21:34:53

标签: java algorithm quicksort

我正在尝试编写一个快速排序算法。请查看以下代码:

public static void quickSort(int[] tab, int lowIndex, int highIndex) {
    if (tab.length == 0 || tab == null) {
        return;
    }

    int i = lowIndex;
    int j = highIndex;

    int pivot = tab[tab.length / 2];

    while (i <= j) {
        while (tab[i] < pivot) {
            i++;
        }
        while (tab[j] > pivot) {
            j--;
        }

        if (i <= j) {
            int c = tab[i];
            tab[i] = tab[j];
            tab[j] = c;
            i++;
            j--;
        }

        if (lowIndex < j) {
            quickSort(tab, lowIndex, j); // error !!!
        }
        if (i < highIndex) {
            quickSort(tab, i, highIndex);
        }
    }

}

问题是线程“main”java.lang.StackOverflowError中的异常。有什么问题?

1 个答案:

答案 0 :(得分:3)

这是错误的:

int pivot = tab[tab.length / 2];

您必须在提供的切片中找到枢轴,而不是tab中的全局。

int pivot = tab[lowIndex + (highIndex - lowIndex)/ 2];

你终止递归的条件也是错误的。表的长度不会改变。您必须检查是否lowIndex >= highIndex