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!");
}
}
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!");
}
}

浙公网安备 33010602011771号