文章轉載於:http://blog.csdn.net/vayne_xiao/article/details/53508973
如果以上C代碼看不懂,請看下面java代碼:
1 package algorithm; 2 3 import java.util.Arrays; 4 5 /** 6 * @author yugenhai 7 */ 8 public class QuickSort { 9 10 11 public static void main(String[] args) { 12 int[] arrays = {3, 4, 6, 1, 8, 2, 5, 10, 7, 9}; 13 quickSort(arrays, 0, arrays.length - 1); 14 System.out.println(Arrays.toString(arrays)); 15 } 16 17 18 /** 19 * 快排 20 * @param arr 21 * @param left 22 * @param right 23 */ 24 public static void quickSort(int[] arr, int left, int right) { 25 //聲明一個數來存 基准數 26 int pivot; 27 //一直可以排序 28 if (left < right) { 29 //從小到大 30 pivot = partition(arr, left, right); 31 //一直遞歸處理左邊的一堆數 32 quickSort(arr, left, pivot - 1); 33 //一直遞歸處理右邊的一堆數 34 quickSort(arr, pivot + 1, right); 35 } 36 37 } 38 39 40 /** 41 * 分片排序 42 * 43 * @param arr 44 * @param left 45 * @param right 46 * @return 47 */ 48 private static int partition(int[] arr, int left, int right) { 49 //取一個參照數 50 int key = arr[left]; 51 //一直可以排序 52 while (left < right) { 53 //第一次右邊先走 右邊往左邊一步一步移動 54 while (left < right && arr[right] >= key) { 55 //右邊向左一步 56 right--; 57 } 58 //交換位置 59 arr[left] = arr[right]; 60 //左邊往右邊走 61 while (left < right && arr[left] <= key) { 62 left++; 63 } 64 //交換位置 65 arr[right] = arr[left]; 66 } 67 //碰面了把參照數交給往右走的 68 arr[left] = key; 69 //返回左邊的數 70 return left; 71 } 72 }