快速排序的递归非递归实习java
2015-09-07 10:08
465 查看
package com.edu.hpu.sort.swap.quick; import java.util.Arrays; import java.util.LinkedList; import com.edu.hpu.sort.Sort; public class QuickSort extends Sort { @Override public int[] doSort(int[] arr) { return quickSort2(arr, 0, arr.length - 1); } @SuppressWarnings("unused") private int [] quickSort(int [] arr, int p, int r){ // 递归求解 if(p < r){ int q = partition(arr, p, r); quickSort(arr, p, q - 1); quickSort(arr, q + 1, r); } return arr; } private int [] quickSort2(int [] arr, int p, int r){ // 非递归求解 if(p < r){ LinkedList<Integer> stack = new LinkedList<Integer>(); int q = partition(arr, p, r); if(p < q - 1){ stack.push(q - 1); stack.push(p); } if(r > q + 1){ stack.push(r); stack.push(q + 1); } while(!stack.isEmpty()){ int l = stack.pop(); int h = stack.pop(); int mid = partition(arr, l, h); if(l < mid - 1){ stack.push(mid - 1); stack.push(l); } if(h > mid + 1){ stack.push(h); stack.push(mid + 1); } } } return arr; } private int partition(int []arr, int p, int r){ int aix = arr[r]; int i = p -1; for(int j = p; j < r; j++){ if(arr[j] < aix){ i++; swap(arr, i, j); } } swap(arr, i + 1, r); System.out.println(Arrays.toString(arr)); return i + 1; } public static void main(String[] args) { QuickSort quickSort = new QuickSort(); quickSort.printOrder(new int []{4, 1, 3, 2, 16, 9, 100, 194, 8, 7}); } }
相关文章推荐
- 【springmvc+mybatis项目实战】杰信商贸-7.生产厂家新增
- Java中面向对象思想分析
- 【Java】J2SE
- MyBatis学习笔记(十二)spring与Mybatis整合事务
- java unicode与汉字中文互转
- Java管道流
- Static、final、abstract、接口、构造方法及java语法总结
- java 选择排序
- 基数排序的java实现
- eclipse的thrift插件
- java上传文件到FTP服务器
- Java获取某个月的天数
- 归并排序的递归与非递归实现java
- java IO流分析,java文件读写
- Thinking in java 之:内部类
- Java IO流学习总结
- Spring MVC+Mybatis入门学习小项目实例
- 用Eclipse运行selenium脚本时弹出浏览器导入向导设置的解决方法
- [leetcode-149]Max Points on a Line(java)
- ibooking项目设计介绍(一个基于SSH的外卖点餐系统)