ITPub博客

首页 > 应用开发 > Java > 快速排序

快速排序

原创 Java 作者:壹頁書 时间:2016-09-21 18:35:13 0 删除 编辑

  1. public class Sort{
  2.     public static void main(String[] args){
  3.         Integer[] data={100,20,21,28,22,26,80,33,3,2,9,8,7,10,77,66,99,96,91,94};
  4.         BaseSort s=new Quick(data);

  5.         s.show(data);

  6.         System.out.println(s.isSorted(data));
  7.     }
  8. }



  9. class Quick extends BaseSort{
  10.     public Quick(Comparable[] data){
  11.             sort(data,0,data.length-1);
  12.     }

  13.     @Override
  14.     void sort(Comparable[] data, int lo, int hi) {
  15.         if(hi<=lo){
  16.             return;
  17.         }
  18.         int j=partition(data,lo,hi);
  19.         sort(data,lo,j-1);
  20.         sort(data,j+1,hi);
  21.     }

  22.     private int partition(Comparable[] data, int lo, int hi) {
  23.         int i=lo,j=hi+1;
  24.         Comparable v=data[lo];
  25.         while(true){
  26.             while(less(data[++i],v)){
  27.                 if(i==hi)
  28.                     break;
  29.             }
  30.             while(less(v,data[--j])){
  31.                 break;
  32.             }
  33.             if(i>=j){
  34.                 break;
  35.             }
  36.             exch(data,i,j);
  37.         }
  38.         exch(data,lo,j);
  39.         return j;
  40.     }
  41. }
  42. abstract class BaseSort {
  43.     abstract void sort(Comparable[] data,int lo,int hi);

  44.     //比较
  45.     public boolean less(Comparable v,Comparable w){
  46.         return v.compareTo(w)<0;
  47.     }

  48.     //打印
  49.     public void show(Comparable[] data){
  50.         for(int i=0;i<data.length;i++){
  51.             System.out.print(data[i]+" ");
  52.         }
  53.         System.out.println("");
  54.     }

  55.     //验证
  56.     public boolean isSorted(Comparable[] data){
  57.         for(int i=1;i< data.length;i++){
  58.             if(less(data[i],data[i-1]) )
  59.                 return false;
  60.         }
  61.         return true;
  62.     }

  63.     //交换
  64.     public void exch(Comparable[] data,int i,int j){
  65.         Comparable t=data[i];
  66.         data[i]=data[j];
  67.         data[j]=t;
  68.     }
  69. }


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2125289/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 查看主机串号
下一篇: 二叉堆优先队列
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339922