java下 快速排序的實現
package quicksort;
public class myquicksort {
public static void quicksort(int[] array,int start,int end){
int q=0; //存儲 切分的位置 左邊的都比這個數大,右邊的都比這個位置小
if(start<end){
System.out.println(" start :"+start+"end :"+end);
q=partition(array,start,end);
quicksort(array,start,q-1);
quicksort(array,q,end);
}
}
public static int partition(int[] array,int start,int end){
int index=start-1;
int x=array[end];
int j=0;
ArrayUtils.PrintArray(array);
for(j=start;j<end;j++){
if(array[j]<=x){
index++;
ArrayUtils.exchangeElements(array,j,index);
}
}
//System.out.println("index+1: "+(index+1) +"end: "+(end));
System.out.println("index:"+index);
ArrayUtils.exchangeElements(array,index+1 ,end );
return index+1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array={5,2,4,6,1,3,22,36};
System.out.println("Before sort:");
ArrayUtils.PrintArray(array);
System.out.println("array.length-1"+(array.length));
quicksort(array,0,array.length-1);
System.out.println("after sort:");
ArrayUtils.PrintArray(array);
}
}
其中 partition這個函數實現了
以array 數組中 end 爲標杆,比他小的都在他的左邊,比他大得都在他的右邊。
package quicksort;
public class ArrayUtils {
public static void PrintArray(int[] array){
System.out.print("{");
for(int i=0;i<array.length;i++){
System.out.print(array[i]);
if(i<array.length -1){
System.out.print(",");
}
}System.out.print("}");
}
public static void exchangeElements(int[] array,int index1,int index2){
int temp=array[index1];
array[index1]=array[index2];
array[index2]=temp;
}
}