網上大部分快速排序算法都是依據《算法導論》來實現的,無一例外都是左右指針各走一步來實現快速排序。我以爲這種不是那麼的好理解,而使用單向掃描要更好理解一點。java
public class QuickSortTest { public static void main(String[] args) { int[] arr = {2,1,6,1,4}; quickSort(arr, 0, arr.length - 1); print(arr); } private static void print(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } private static void quickSort(int[] arr, int p, int r) { if (p < r) { int q = partition(arr, p, r); quickSort(arr, p, q - 1); quickSort(arr, q + 1, r); } } private static int partition(int[] arr, int pivot, int r) { int p = pivot + 1; int bigger = r; while (p <= bigger) { if (arr[p] <= arr[pivot]) { p++; } else { swap(arr, p, bigger); bigger--; } } //最後還要一次交換 swap(arr, pivot, bigger); return bigger; } private static void swap(int[] arr, int p, int bigger) { //交換元素 int t = arr[p]; arr[p] = arr[bigger]; arr[bigger] = t; } }