文章转载于: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 }
