Java-快速排序,java.lang.StackOverflowError堆栈溢出异常处理

通常情况下,当使用基本快速排序,因为用到递归,方法进栈出栈,当数据量达到一定数目的时候会出现堆栈溢出异常java.lang.StackOverflowError;
基本快速排序-没有什么优化措施

public static void quickSort(int[] arr, int low, int high) {
        if (low >= high)
            return;
        int position = position(arr, low, high);
        quickSort(arr, low, position - 1);
        quickSort(arr, position + 1, high);
    }

    /**
     * 默认基准为第一个,并移到中间,通过递归会让数组依照基准左右分组
     * 
     * @param arr
     * @param low
     * @param high
     * @return
     */
    public static int position(int[] arr, int low, int high) {
        int first = low;
        int last = high;
        int key = arr[low];
        while (first < last) {
            while (first < last && arr[last] >= key)
                last--;
            arr[first] = arr[last];
            while (first < last && arr[first] <= key)
                first++;
            arr[last] = arr[first];
        }
        arr[first] = key;
        return first;
    }

简单的设置线程栈内存大小来处理(没有测试准确的内存所需,可能会浪费)

此时arr数组的长度为:1,000,000;

ThreadGroup group = new ThreadGroup("QuickSort");
        Thread thread = new Thread(group, new Runnable() {
            public void run() {
                Sort.quickSort(arr, 0, arr.length - 1);
            }
        }, "quickSort", 1024 * 1024 * 100);
        thread.start();

你可能感兴趣的:(Java-排序)