1. 程式人生 > >Java 快速排序 整理知識點

Java 快速排序 整理知識點

1.什麼是排序? 排序是按照某種順序(升序或者降序)排列序列元素的一種演算法。 2.為什麼需要排序? 排序是電腦科學中的重要演算法,排序有時候可以顯著降低問題的複雜度,可以使用排序作為減少查詢複雜度的一種技術。鑑於排序的重要性,已有針對排序演算法的大量研究並將其用於多種計算機演算法(例如:查詢元素)、資料庫演算法和其他的演算法中。 3.快速排序 快速排序(quicksort)是分治演算法技術的一個例項,也稱為分割槽交換排序。快速排序採用遞迴呼叫對元素進行排序,是基於比較的排序演算法中的一個著名演算法。 劃分:陣列A[0…n]被分成A[0,…,mid] 和 A[mid+1 ,…,n],使得分開的兩個陣列,前者的元素全部小於後者的元素,然後再劃分的過程中不斷的計算key的索引位置。 分而治之:對第一遍區分出來的陣列進行遞迴快速排序。 演算法思路: 1)如果陣列中僅有一個元素或者沒有元素需要排序,則返回。 2)選擇陣列中的一個元素作為key(通常是第一個元素)。 3)先進行第一次排序,然後分成兩部分:一部分大於key,一部分小於key。 4)對這兩部分使用遞迴,呼叫該演算法。 原始碼如下:

public static int[] quickSort(int[] arr, int low, int hight) {

		if (low > hight) {
			return arr;
		}
		int left = low, right = hight, key = arr[low]; // 初始化變數
		while (left < right) {

			while (left < right && key < arr[right]) {
				right--;
			}
			while (left < right && key >= arr[left]) {
				left++;
			}
			if (left < right) {
				int temp = arr[left];
				arr[left] = arr[right];
				arr[right] = temp;
			}
		}
		int temp = arr[right];
		arr[right] = arr[low];
		arr[low] = temp;

		quickSort(arr, low, right - 1);

		quickSort(arr, right + 1, hight);

		return null;
	}