1. 程式人生 > >快速排序演算法思想及實現

快速排序演算法思想及實現

快速排序演算法是對氣泡排序演算法的一種改進,它的核心思想就是選取一個基準元素(通常已需要排序的陣列第一個數),然後通過一趟排序將比基準數大的放在右邊,比基準數小的放在左邊,接著對劃分好的兩個陣列再進行上述的排序。
例如對陣列5,4,1,7,3,9,21,-1進行一趟排序。
首先選取5作為基準數,設定兩個變數i=0,j=陣列長度-1。
從j開始從又向左找比5小的數,j=7時,-1<5,則將-1和5交換位置,此時陣列變成
-1,4,1,7,3,9,21,5 i=0,j=7
從i開始從左往又找比5大的數,i=3時,7>5,則將7和5交換位置,此時陣列變成
-1,4,1,5,3,9,21,7 i=3,j=7
然後又繼續從j開始從又向左找比5小的數,當j=4時,3<5則將3和5交換位置,此時陣列變成
-1,4,1,3,5,9,21,7 i=3,j=4
再從i開始從左往又找比5大的數,如果當i==j還是沒有找到的話,說明一趟排序結束。所以最後一趟排序下來的結果為
-1,4,1,3,5,9,21,7
然後再將分割出來的兩個陣列重複以上的操作,最終達到排序的目的。

public class QuickSort {


    public static void main(String[] args) {
        int[] arr =new int[]{5,4,1,7,3,9,21,-1};
        sort(arr,0,7);
    }

    public static void sort(int[] arr,int l,int r){
        if(l>r) return;
        int start = l;
        int end = r;
        int key = arr[l];
        while
(start<end){ //從又向左找比基準值小的並交換位置 while(start<end&&arr[end]>=key){ end--; } if(start<end){ int temp = arr[end]; arr[end] = key; arr[start] =temp; } //從左向又找比基準值大的並交換位置
while(start<end&&arr[start]<=key){ start++; } if(start<end){ int temp = arr[start]; arr[start] = key; arr[end] = temp; } } System.out.println(start+" "+end); System.out.println(arr[0]+" "+arr[1]+" "+arr[2]+" "+arr[3]+" "+arr[4]+" "+arr[5]+" "+arr[6]+" "+arr[7]); sort(arr,l,start-1); sort(arr,start+1,r); } }

以上的排序的程式碼,有什麼問題歡迎批評指正。