[算法之排序]快速排序算法(java实现)
来源:互联网 发布:室内设计好的软件 编辑:程序博客网 时间:2024/06/11 21:17
/*** * * @author xiaoo_gan * 快速排序 * * * 测试: * 第一种partition * 排序 20000000 个数, 快速排序用时: 11.58600 秒 * 排序 50000000 个数, 快速排序用时: 37.75700 秒 * * * 第二种partition * 排序 20000000 个数, 快速排序用时: 12.05800 秒 * */public class Quick {//第一种排序public static void sort(Comparable[] a) {//StdRandom.shuffle(a);sort(a, 0, a.length -1);}private static void sort(Comparable[] a, int lo, int hi) {if(hi <= lo)return;int j = partition(a, lo, hi);sort(a, lo, j - 1);sort(a, j + 1, hi);}//partiton函数一private static int partition(Comparable[] a, int lo, int hi) {int i = lo;int j = hi + 1;Comparable value = a[lo];while(true) {while(less(a[++i], value))if (i == hi) {break;}while(less(value, a[--j]))if (j == lo) {break;}if (i >= j) {break;}exch(a, i, j);}exch(a, lo, j);return j;}private static boolean less(Comparable a, Comparable b) {return (a.compareTo(b) < 0);}//第二种排序public static void sort1(Comparable[] a) {//StdRandom.shuffle(a);sort1(a, 0, a.length -1);}private static void sort1(Comparable[] a, int lo, int hi) {if(hi <= lo)return;int j = partition1(a, lo, hi);sort(a, lo, j - 1);sort(a, j + 1, hi);}//partiton函数二 来自算法导论private static int partition1(Comparable[] a, int lo, int hi) {Comparable x = a[hi];int i = lo - 1;for (int j = lo; j <= hi - 1; j++) {if (less1(a[j], x)) {i ++;exch(a, i, j);}}exch(a, i + 1, hi);return i + 1;}private static boolean less1(Comparable a, Comparable b) {return (a.compareTo(b) <= 0);}private static void exch(Comparable[] a, int i, int j) {Comparable swap = a[i];a[i] = a[j];a[j] = swap;}public static boolean isSorted(Comparable[] a) {for (int i = 0; i < a.length - 1; i++) {if(!less(a[i], a[i+1]))return false;}return true;}private static void print(Boolean isSorted, Comparable[] a) {if (isSorted) {StdOut.println("after sorting :");} else {StdOut.println("before sorting :");}for (int i = 0; i < a.length; i++) {if ((i % 10) == 0) {if(i != 0)StdOut.println();StdOut.print("\t");}StdOut.print("\t" + a[i]);}StdOut.println();}public static void main(String[] args) {int M = 20000000;Double[] a = new Double[M];for (int i = 0; i < M; i++) {a[i] = StdRandom.uniform();}//String[] a = {"S", "O", "R", "T", "E", "X", "A", "M", "P", "L", "E"};//print(false, a);Stopwatch timer = new Stopwatch();sort1(a);double elapsedTime = timer.elapsedTime();//print(true, a);if(isSorted(a))System.out.printf("排序 %d 个数, 快速排序用时: %.5f 秒", a.length, elapsedTime);}}
0 0
- 排序算法之快速排序、归并排序(java实现)
- [算法之排序]快速排序算法(java实现)
- [算法之排序]三向切分的快速排序算法(java实现)
- Java实现排序算法之快速排序
- 排序算法之快速排序 Java实现
- 排序算法之快速排序java实现
- 排序算法之——快速排序(Java实现)
- 排序算法之——快速排序(Java实现)
- 排序算法之快速排序法(Java实现)
- 排序算法入门之快速排序(java实现)
- 算法之快速排序----------用Java实现
- 快速排序算法之JAVA实现
- 算法学习之java实现快速排序
- Java实现算法之快速排序
- 算法实现Java之快速排序
- Java算法实现之快速排序
- java实现排序算法之交换排序(冒泡排序和快速排序)
- Java实现数组的快速排序(快速排序算法)
- SSH框架的开发流程
- vs2010上qt安装
- 2015届华为校园招聘机试题
- Hibernate核心API
- hdu 5154 Harry and Magical Computer
- [算法之排序]快速排序算法(java实现)
- 从餐厅运营来看如何构建高性能服务器
- Linux下重启mysql的正确方法
- 自定义类型转换器
- 九度OJ 1001 A+B for Matrices
- [算法之排序]归并排序算法(java实现)
- struts2的result-type详解
- BCB中的TMemo(通过ScrollBars属性可以激活TMemo内置的滚动条)
- Mysql创建用户与授权