java實現的快速排序算法


 

快速排序的原理:選擇一個關鍵值作為基准值。比基准值小的都在左邊序列(一般是無序的),比基准值大的都在右邊(一般是無序的)。一般選擇序列的第一個元素。

一次循環:從后往前比較,用基准值和最后一個值比較,如果比基准值小的交換位置,如果沒有繼續比較下一個,直到找到第一個比基准值小的值才交換。找到這個值之后,又從前往后開始比較,如果有比基准值大的,交換位置,如果沒有繼續比較下一個,直到找到第一個比基准值大的值才交換。直到從前往后的比較索引>從后往前比較的索引,結束第一次循環,此時,對於基准值來說,左右兩邊就是有序的了。

接着分別比較左右兩邊的序列,重復上述的循環。

public class FastSort{

     public static void main(String []args){
        System.out.println("Hello World");
        int[] a = {12,20,5,16,15,1,30,45,23,9};
        int start = 0;
        int end = a.length-1;
        sort(a,start,end);
        for(int i = 0; i<a.length; i++){
             System.out.println(a[i]);
         }
        
     }
     
     public void sort(int[] a,int low,int high){
         int start = low;
         int end = high;
         int key = a[low];
         
         
         while(end>start){
             //從后往前比較
             while(end>start&&a[end]>=key)  //如果沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位置,然后又從前往后比較
                 end--;
             if(a[end]<=key){
                 int temp = a[end];
                 a[end] = a[start];
                 a[start] = temp;
             }
             //從前往后比較
             while(end>start&&a[start]<=key)//如果沒有比關鍵值大的,比較下一個,直到有比關鍵值大的交換位置
                start++;
             if(a[start]>=key){
                 int temp = a[start];
                 a[start] = a[end];
                 a[end] = temp;
             }
         //此時第一次循環比較結束,關鍵值的位置已經確定了。左邊的值都比關鍵值小,右邊的值都比關鍵值大,但是兩邊的順序還有可能是不一樣的,進行下面的遞歸調用
         }
         //遞歸
         if(start>low) sort(a,low,start-1);//左邊序列。第一個索引位置到關鍵值索引-1
         if(end<high) sort(a,end+1,high);//右邊序列。從關鍵值索引+1到最后一個
     }
     
}
        

 

上面最后一句不是基准值的意思是,不是直接用基准值交換,是用基准值所在的索引交換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM