practical of programming 第二章 java的quick sort

import java.util.Random;

class Quicksort {
//随机数的生成
static Random rgen = new Random();

    //Quicksort.rand: return random integer in [left,right]
static int rand(int left, int right){
//Java随机数生成器的返回值可正可负, 所以用Math.abs
return left + Math.abs(rgen.nextInt()%(right-left+1));
}

    //Quicksort.swap: swap v[i] and v[j]
static void swap(Object[] v, int i, int j){
Object temp;

temp = v[i];
v[i] = v[j];
v[j] = temp;
}

//Quicksort.sort: quicksort v[left]..v[right]
static void sort(Object[] v, int left, int right, Cmp cmp){
int i, last;
if(left>=right)//nothing to do
return;
swap(v,left,rand(left,right));  //move pivot elem
last = left;
for(i = left+1; i<=right; i++)  //partition
if(cmp.cmp(v[i],v[left])<0)
swap(v,++last,i);
swap(v,left,last);
sort(v,left,last-1,cmp);    //recursively sort first half
sort(v,last+1,right,cmp);   //the second part
}
}

interface Cmp{//用于比较的函数接口
int cmp(Object x, Object y);   
}

//整型 类型的比较实现
class Icmp implements Cmp{
public int cmp(Object o1, Object o2){
int i1 = ((Integer)o1).intValue();
int i2 = ((Integer)o2).intValue();
if (i1<i2)
return -1;
else if (i1==i2)
return 0;
else
return 1;
}
}

// 字符串比较
class Scmp implements Cmp{
public int cmp(Object o1, Object o2){
String s1 = (String)o1;
String s2 = (String)o2;
return s1.compareTo(s2);
}
}

public class Qsort{   
public static void main(String[] args){
String[] sarr = new String[5];
sarr[0] = "Steve";
sarr[1] = "Bill";
sarr[2] = "Eric";
sarr[3] = "Claire";
sarr[4] = "Peter";       

Quicksort.sort(sarr,0,sarr.length-1, new Scmp());
for(int p = 0; p < 5; p++){
System.out.println(sarr[p]);
}
System.out.println("OK!");

}
}

posted @ 2010-02-23 22:18  莫忆往西  阅读(189)  评论(0)    收藏  举报