public class RandomizedQuickSort implements Comparable {  
  
private int value;
private static Comparable[] a;
RandomizedQuickSort(Comparable[] arr){
a=arr;
}

private static void randomizedqSort(int p,int r){
if(p<r){
int q=randomizedPartition(p,r);
randomizedqSort(p,q-1);
randomizedqSort(q+1,r);
}
}

        private static int randomizedPartition(int p,int r){
         int i=Random(p,r);
         swap(a,i,p);
         return partition(p,r);
        }
        
        
private static int partition(int p,int r){
int i=p,j=r+1;
Comparable x=a[p];
while(true){
while(a[++i].compareTo(x)<0&&i<r);
while(a[--j].compareTo(x)>0);
if(i>=j) break;
swap(a,i,j);
}
a[p]=a[j];
a[j]=x;
return j;
}
public int compareTo(Object x){
int y=(Integer)x;
if(value<y) return -1;
if(value==y) return 0;
return 1;
}
public static void swap(Comparable[] a,int i,int j){
Comparable temp=a[i];
a[i]=a[j];
a[j]=temp;

}
public static int Random(int p,int r){
    return r+(int)Math.random()*(r-p);
}

public static void main(String[] args){

Comparable[] arr={12,32,2,6,56,34,18,24,69,20,50,45,67,21,11,17};
int p=0,r=arr.length-1 ;
    new RandomizedQuickSort(arr);
randomizedqSort(p,r);

for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}

}
可以运行,结果正确
但是肯定有不符合java编程的

解决方案 »

  1.   

    打代码最好把代码放到代码框中去 这样能看到缩进 要不然我还要复制到Eclipse中去 最近 越来越懒了 不想复制  哎...
      

  2.   

    刚看了一眼,RandomizedQuickSort的构造方法最好是public的
      

  3.   

    帮楼主排个版先public class RandomizedQuickSort implements Comparable
    {
       private int value;
       private static Comparable[] a;
       RandomizedQuickSort(Comparable[] arr)
       {
          a=arr;
       }
       private static void randomizedqSort(int p,int r)
       {
          if(p <r)
          {
             int q=randomizedPartition(p,r);
             randomizedqSort(p,q-1);
             randomizedqSort(q+1,r);
          }
       }
       private static int randomizedPartition(int p,int r)
       {
          int i=Random(p,r);
          swap(a,i,p);
          return partition(p,r);
       }
       private static int partition(int p,int r)
       {
          int i=p,j=r+1;
          Comparable x=a[p];
          while(true)
          {
             while(a[++i].compareTo(x) <0&&i <r);
             while(a[--j].compareTo(x)>0);
             if(i>=j) break;
             swap(a,i,j);
          }
          a[p]=a[j];
          a[j]=x;
          return j;
       }
       public int compareTo(Object x)
       {
          int y=(Integer)x;
          if(value <y) return -1;
          if(value==y) return 0;
          return 1;
       }
       public static void swap(Comparable[] a,int i,int j)
       {
          Comparable temp=a[i];
          a[i]=a[j];
          a[j]=temp;
       }
       public static int Random(int p,int r)
       {
          return r+(int)Math.random()*(r-p);
       }
       public static void main(String[] args)
       {
          Comparable[] arr=
          {
          }
          12,32,2,6,56,34,18,24,69,20,50,45,67,21,11,17;
          int p=0,r=arr.length-1 ;
          new RandomizedQuickSort(arr);
          randomizedqSort(p,r);
          for(int i=0;
          i <a.length;
          i++)
          {
             System.out.print(a[i]+" ");
          }
       }
    }
      

  4.   

     new RandomizedQuickSort(arr); 
    a是静态的,不要用对象去改变它
      

  5.   

    初始化和赋值最好分开,不同变量最好也不要放在一起定义和赋值,int p=0,r=arr.length-1 ;----->int p, r;p = 0;
    r = arr.length - 1;
      

  6.   

    2、变量的命名,a,p,r,x这些都是什么?不能见名知意~~,3、注释不够,全要分析理解,没有注释参照~~4、swap(Comparable[] a 与属性a重名不好,尽量避免5、Random(方法名,不要以大写开头6、while与if,即使只有一条语句,也应该用{}括起来,以保持结构清晰7、对于while循环执行空语句,是否有必要(逻辑没有分析,自己看一下吧)?
      

  7.   

    这段代码能正常运行么?
    为啥我放到eclipse里面报错了啦.
    1.int y=(Integer)x;有这样的写法么?自动打解包好像也不能将一个基础数据类型指向一个对象吧?
    至少也来个Integer.valueOf(x)吧.也许我孤陋了不懂这样怎么弄,我是新手.
    2.就算是用接口来向下转型总得有个强制类型转换吧?再者接口怎么初始化啊?
    public static void swap(Comparable[] a,int i,int j){ 
    Comparable temp=a[i]; 
    a[i]=a[j]; 
    a[j]=temp; 
    } Comparable[] arr={12,32,2,6,56,34,18,24,69,20,50,45,67,21,11,17};楼主你说没错怎么编译通过的!?
      

  8.   

    恩,是的,楼主说的就是:“可以运行,结果正确 
    但是肯定有不符合java编程的 ”
      

  9.   

    compareTo()这个方法里的value我不太明白,我是看书后来加上去的
    那静态变量a[]最好怎么赋值?
    类变量在哪里赋值比较合适,构造函数、直接赋值或是在主函数里?
    大虾们再好好看看