JAVA-數據結構-快速排序

第一章 快排的思想

是冒泡排序法的升級,屬於交換排序
基本思想: 通過一趟排序將待排序記錄分割成獨立的兩部分(樞紐值的左邊部分和右邊部分),其中一部分的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,已達到整個序列有序的目的。

第二章 快排的圖解

樞紐值的選取對快排的時間複雜度至關重要,如果樞紐值選的不好,最終就會生成一顆嚴重傾斜的二叉樹,造成時間複雜度的下降,我們選擇每次遞歸進來的最左邊的點作爲樞紐值點。
在這裏插入圖片描述
當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);
		}
	}
}

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