黑马程序员技术交流社区

标题: 快排算法怎么写? [打印本页]

作者: 微--尘    时间: 2016-7-5 00:36
标题: 快排算法怎么写?
快排算法怎么写?
作者: hlhdidi    时间: 2016-7-5 19:02
  1. public class Quick {
  2.     public static void sort(Comparable[] a) {
  3.         StdRandom.shuffle(a);
  4.         sort(a,0,a.length-1);
  5.     }

  6.     public static void sort(Comparable[] a, int lo, int hi) {
  7.         if(hi<=lo) return;
  8.         int j=partition(a,lo,hi);    //j前的元素不大于a[j],j后的元素不小于a[j]
  9.         sort(a,lo,j-1);
  10.         sort(a,j+1,hi);
  11.     }

  12.     public static int partition(Comparable[] a, int lo, int hi) {
  13.         int i=lo;
  14.         int j=hi;
  15.         Comparable v=a[lo];
  16.         while(true) {
  17.             while(less(a[++i],v)) {if(i==hi) break;}
  18.             while(less(v,a[--j])) {if(j==lo) break;}
  19.             if(i>=j) break;
  20.             exch(a,i,j);
  21.         }
  22.         exch(a,lo,j);
  23.         return j;
  24.     }
  25.     public static void exch(Comparable[] a, int i, int min) {
  26.         Comparable t=a[i];
  27.         a[i]=a[min];
  28.         a[min]=t;
  29.     }
  30.     public static boolean less(Comparable v, Comparable w) {
  31.         return v.compareTo(w)<0;
  32.     }
  33. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2