快速排序发:一次排2个最值。你可以看下
class QuickSort {
public void quickSort(String[] strDate,int left,int right){//数组,左角标,右角标。
String middle,tempDate;//中间角标,和交换时的中间变量。
int i,j;
i=left;
j=right;
middle=strDate[(i+j)/2];//中间角标
do{//将比中间值小的放左边,比中间值大的放右边
while(strDate[i].compareTo(middle)<0&& i<right)
i++; //找出左边比中间值大的数
while(strDate[j].compareTo(middle)>0&& j>left)
j--; //找出右边比中间值小的数
if(i<=j){ //将左边大的数和右边小的数进行替换
tempDate=strDate[i];
strDate[i]=strDate[j];
strDate[j]=tempDate;i++;j--;
}
}
while(i<=j);
//当两者交错时停止
if(i<right){//将[i]到right再次进行递归。直到每次得到排序的最大值。
quickSort(strDate,i,right);
}
if(j>left){//将left到j再次进行递归。直到每次得到排序的最小值。
quickSort(strDate,left,j);
}
}
//因为是用递归法,而且一次两边一起排,所以效率很高。但如果数太多了,就会出问题。
public static void main(String[] args){
String[] strVoid=new String[]{"11","66","22","0","55","22","0","32"};
QuickSort sort=new QuickSort();
sort.quickSort(strVoid,0,strVoid.length-1);
for(int i=0;i<strVoid.length;i++){
System.out.println(strVoid[i]+" ");
}
}
} |