快速排序,是選取一個元素,而後通過交換元素,保證選定元素的左邊都小於它,右邊元素都大於它。每次操做後,選定元素的位置就是排序後的位置。java
就像多我的進行高矮個排列同樣,你看了下,前面的人都比你矮,後面的人都比你高,那麼你就能夠不動了,隨他們怎麼折騰,反正你站的位置對了,他們排序好了,你也仍是站在這個位置。ui
import java.util.Arrays; public class QuickSort { public static void main(String[] args) { int[] nums = {5, 12, 5, 7, 1, 4, 7, 8, 9}; quickSort(nums, 0, nums.length-1); System.out.println(Arrays.toString(nums)); } public static void quickSort(int[] nums, int start, int end){ if(start>=end) return ; int mid = partition(nums, start, end); quickSort(nums, start, mid-1); quickSort(nums, mid+1, end); } public static int partition(int[] nums, int start, int end){ int p_value = nums[start]; int i = start, j = end+1; while(true){ while(nums[++i]<p_value) if(i>=end) break; while(nums[--j]>p_value) if(j<=start) break; if(i>=j) break; int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } int temp = nums[j]; nums[j] = nums[start]; nums[start] = temp; return j; } }
快排的平均時間複雜度是NlogN。空間複雜度爲O(1)code