快速排序(java)筆記

package test;

public class QuickSort {
	
	//比較的時候感覺和二叉樹有點類似。
	public static void quickCore(int[] arr, int low, int hight) {
		//判斷數組是否查詢完畢
		if (low >= hight) {
			return;
		}
		//臨時數字儲存關鍵字(對比字段)
		int temp = arr[low];
		//與關鍵字對比,先從後往前掃描,遇到比關鍵字小的,就將這次比較的值填充到指針開始的地方
		//與關鍵字對比,從前往後掃描,遇到比關鍵字大的,就將這次比較的值填充到指針結束的地方
		//填坑操作最後一步就是把最初那個臨時的數字放進最後一個坑
		int i = hight, j = low;
		while (i > j) {
			while (i > j && arr[i] >= temp) {
				i--;
			}
			if (i > j) {
				arr[j] = arr[i];
				j++;
			}
			while (i > j && arr[j] <= temp) {
				j++;
			}
			if (i > j) {
				arr[i] = arr[j];
				i--;
			}
		}
		arr[i] = temp;
		//分而治之(將關鍵字左邊的數組循環快排)
		quickCore(arr, low, i - 1);
		//分而治之(將關鍵字右邊的數組循環快排)
		quickCore(arr, j + 1, hight);
	}

	// 排序的入口
	public static int[] sort(int arr[]) {
		int low = 0;
		int hight = arr.length - 1;
		quickCore(arr, low, hight);
		return arr;
	}

}

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