快速排序演算法思想及實現
阿新 • • 發佈:2019-01-08
快速排序演算法是對氣泡排序演算法的一種改進,它的核心思想就是選取一個基準元素(通常已需要排序的陣列第一個數),然後通過一趟排序將比基準數大的放在右邊,比基準數小的放在左邊,接著對劃分好的兩個陣列再進行上述的排序。
例如對陣列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);
}
}
以上的排序的程式碼,有什麼問題歡迎批評指正。