Java 快速排序 整理知識點
阿新 • • 發佈:2018-12-11
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; }