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编程的
{
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]+" ");
}
}
}
a是静态的,不要用对象去改变它
r = arr.length - 1;
为啥我放到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};楼主你说没错怎么编译通过的!?
但是肯定有不符合java编程的 ”
那静态变量a[]最好怎么赋值?
类变量在哪里赋值比较合适,构造函数、直接赋值或是在主函数里?
大虾们再好好看看