您的位置:首页 > 编程语言 > Java开发

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

2017-06-02 14:25 288 查看
通常情况下,当使用基本快速排序,因为用到递归,方法进栈出栈,当数据量达到一定数目的时候会出现堆栈溢出异常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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: