快速排序——java

//快排思想:一趟排完後將基準值(一般爲第一個值)放到中間,左邊比他小,右邊都比他大,即二分。然後分別對左右兩塊數據再進行快排,依次遞歸;一趟排序過程如下圖所示:(http://blog.csdn.net/pzhtpf/article/details/7560294)



import java.util.*;
import java.io.*;
public class QuickSort{
public int oneci(int[] a, int j,int i){
int temp=a[i];
while(i<j){
while(j>i && a[j]>temp){//j和i未相遇,且值不小於參考值,則不交換,下標繼續左移
j--;
}
a[i]=a[j];//否則交換值,小值放前
while(i<j && a[i]<temp){//j和i未相遇,且值不大於參考值,則不交換,下標繼續左移
i++;
}
a[j]=a[i]; //否則 交換值,大值放後
}
a[i]=temp;//保存中值到位置i
return i;//返回中間位置i;
}

public void digui(int[] a,int j,int i){
while(i<j){
int middle=oneci(a,j,i);//求得中間位置 ,數據分兩塊
digui(a, i,middle-1);//對前塊數據排序
digui(a, middle+1,j);//對後塊數據排序
}
}

public void sort(int[] a){
if (a.length>0){
digui(a, a.length-1,0);
}
}

public static void main(String[] args){
int[] a=new int[]{14,31,6,7,12,32,11};
QuickSort M=new QuickSort();
M.sort(a);
       for(int i=0;i<a.length;i++){  
           System.out.print(a[i]+" ");  
       }   
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章