快速排序(java 语言实现)
2016-04-17 11:07
155 查看
package com.shan.quickSort; /** * 快速排序是由C.A.R.Hoare 开发的,该算法在数组中选择一个称为主元(pviot)的元素将数组分为两部分, * 是的第一部分的元素全部小于或等于主元,而第二部分的元素全部大于主元。 * 对第一部分递归地使用快速排序, * 对第二部分递归地使用快速排序。 * @author shan * */ public class QuickEx { public static void main(String[] args) { int[] list = new int[15]; for (int i = 0; i < 15; i++) { list[i] = (int) (Math.random() * 10); } printArray(list); sort(list, 0, list.length - 1); printArray(list); } private static void printArray(int[] list) { System.out.println(); for (int i = 0; i < list.length; i++) { System.out.print(list[i] + " "); } } private static void sort(int[] list, int low, int high) { // low >= high 就是递归终止的条件 if (low >= high) return; int j = partition(list, low, high); sort(list, low, j - 1); sort(list, j + 1, high); } private static int partition(int[] list, int low, int high) { // 注意应该使得 lo hi 总代表当前状态,所以在这里使用 后置运算 算法将不能正常工作 int v = list[low], lo = low, hi = high + 1; while (true) { while (list[++lo] <= v) if (lo == high) break; while (list[--hi] > v) if (hi == low) break; /* * if(lo < hi){ swap(list, lo, hi); }else{ break; } */ if (lo >= hi) break; swap(list, lo, hi); } swap(list, low, hi); return hi; } private static void swap(int[] list, int a, int b) { a916 int temp = list[a]; list[a] = list[b]; list[b] = temp; } }
相关文章推荐
- Spring基础(一)——AOP&IoC
- 20145326 《Java程序设计》第7周学习总结
- 深入浅出Java并发包—锁机制(三)
- eclipse调试百度地图demo提示 230错误 Scode码校验失败
- 深入浅出Java并发包—读写锁ReentrantReadWriteLock原理分析(二)
- 安装eclipse的JRebel6.0.3的插件
- java基础(3)--java.lang.ClassLoader类的用法
- java冒泡排序
- 解密JVM GC
- Spring MVC整体处理流程
- 深入浅出Java并发包—锁机制(一)
- java中的缓存
- 【Java学习-J.160411.0.8】笔记7-Java第一个hello world学习
- struts2中拦截器实现的三种方式
- java native关键字
- 20145236 《Java程序设计》实验二实验报告
- 201301 JAVA题目0-1级
- 关于JDK和JRE
- java虚拟机Class类文件的结构
- struts2中配置拦截器、拦截器栈和默认拦截器