快速排序的递归与非递归实现
2017-08-23 12:18
393 查看
import java.util.Arrays; import java.util.Stack; class QuickSort { public static void quickSort(int[] array) { if (array==null||array.length==0) { return; } //递归算法 //quickSortCore(array,0,array.length-1); //非递归 quickSortCore2(array,0,array.length-1); } public static void quickSortCore(int[] array, int p, int r) { if (p<r) { int q=partition(array, p,r); quickSortCore(array,p,q-1); quickSortCore(array,q+1,r); } } public static int partition(int[] array, int p, int r) { int x=array[r]; int i=p; int j=i; while (i<r) { if(array[i]<x) { swap(array,i,j); j++; } i++; } swap(array,r,j); return j; } public static void swap(int[] array, int i,int j) { int temp=array[i]; array[i]=array[j]; array[j]=temp; } //非递归,用循环?用栈记录?记录什么?记录当前划分序列的下标起始点 public static void quickSortCore2(int[] array, int start, int end) { Stack<Integer> stack=new Stack<Integer>(); stack.push(start); stack.push(end); while (!stack.empty()) { //后进先出 int r=stack.pop(); int p=stack.pop(); //划分的终止条件 if (p>=r) { continue; } int q=partition(array,p,r); stack.push(p); stack.push(q-1); stack.push(q+1); stack.push(r); } } public static void main(String[] args) { int[] array={2,5,8,4,7,3,6}; quickSort(array); System.out.println(Arrays.toString(array)); } }
相关文章推荐
- 快速排序递归与非递归实现
- 快速排序递归与非递归代码实现与思考
- (转的!)快速排序的递归与非递归实现。
- 快速排序 的原理及其java实现(递归与非递归)
- Java 递归与非递归实现快速排序
- 快速排序的递归与非递归实现
- 快速排序的递归和非递归实现
- C/C++面试题(三) 推断二叉树、快速排序递归实现、递归判断数组递增
- 快速排序的递归实现。 分治法。
- 快速排序递归及非递归实现
- 交换类排序:冒泡,快速(递归与非递归)
- 归并排序的递归实现与非递归实现
- [算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~
- 快速排序的递归和非递归实现方法
- 快速排序的非递归实现
- 快速排序、冒泡排序、堆排序、shell排序的递归和非递归实现
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 霍尔快速排序 非递归 C++实现
- 分别使用递归和迭代实现快速排序
- Ackerman函数的递归、全排列的递归实现、整数划分的递归、二分搜索的递归、合并排序的递归、.快速排序