第一章 快排的思想
是冒泡排序法的升級,屬於交換排序
基本思想: 通過一趟排序將待排序記錄分割成獨立的兩部分(樞紐值的左邊部分和右邊部分),其中一部分的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,已達到整個序列有序的目的。
第二章 快排的圖解
樞紐值的選取對快排的時間複雜度至關重要,如果樞紐值選的不好,最終就會生成一顆嚴重傾斜的二叉樹,造成時間複雜度的下降,我們選擇每次遞歸進來的最左邊的點作爲樞紐值點。
當left指針和right指針指向相同位置時,此處正好是樞紐值的位置,用樞紐值替換left,並返回left位置,由此可進入下一次遞歸。
第三章 快排代碼
public class Test06 {
/*
* 快排 從小到大排序
*/
public static void main(String[] args) {
int a[] = new int[] { 5, 2, 1, 3, 4, 7 };
sort(a, 0, a.length - 1);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
public static void sort(int a[], int left, int right) {
if (left >= right) {
return;
} else {
int i = left;
int j = right;
int key = a[left];
while (i < j) {
while (i < j && a[j] >= key) {
j--;
}
a[i] = a[j];
while (i < j && a[i] <= key) {
i++;
}
a[j] = a[i];
}
a[i] = key;
sort(a, left, i - 1);
sort(a, i + 1, right);
}
}
}