快速排序(Quick Sort)
阿新 • • 發佈:2020-07-10
演算法描述
快速排序使用分治法來把一個串(list)分為兩個子串(sub-lists)。具體演算法描述如下:
- 從數列中挑出一個元素,稱為 “基準”(pivot);
- 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作;
- 遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序
動圖演示
程式碼實現
public class Quick { public static int[] arr = {1, 3, 5, 2, 11, 23, 34, 31, 12, 11}; public static int count = 0; public static void sort(int[] arr, int l, int r) { if (l < r) { int i, j, x; i = l; j = r; x = arr[i]; while (i < j) { while (i < j && arr[j] > x) {//右邊向左找第一個小於x的元素 j--; } if (i < j) {// arr[i++] = arr[j]; } while (i < j && arr[i] < x) { i++; } if (i < j) { arr[j--] = arr[i]; } } arr[i] = x; sort(arr, l, i - 1); sort(arr, i + 1, r); } } public static void main(String[] args) { sort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } }