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();
相关文章推荐
- java实现的冒泡、选择、快速排序
- 排序算法复习(Java实现)(二): 插入,冒泡,选择,Shell,快速排序
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 快速排序--Java实现
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 快速排序方法Java实现与分析
- 快速排序Java源码(递归和非递归)
- 算法-快速排序-java实现
- 【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- java基础知识之 算法 【冒泡排序】【快速排序】
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 快速排序Java实现
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 快速排序java实现
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排
- JAVA排序算法实现代码-快速(Quick Sort)排序
- 快速排序的JAVA实现
- java快速排序
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- 快速排序java实现