黑马程序员技术交流社区

标题: 快速排序的思想 [打印本页]

作者: 黑猫的消失    时间: 2016-6-9 23:16
标题: 快速排序的思想
大家一起来分析分析这种快速排序的思想吧,也许会让你在碰到其他算法题的时候,有新的思路
  1. public class QuickSort {
  2. public static void main(String[] args) {
  3.   int [] array = {49,38,65,97,76,13,27};
  4.   quickSort(array, 0, array.length - 1);
  5.   for (int i = 0; i < array.length; i++) {
  6.    System.out.println(array[i]);
  7.   }
  8. }
  9. /*先按照数组为数据原型写出算法,再写出扩展性算法。数组{49,38,65,97,76,13,27}
  10.   * */
  11. public static void quickSort(int[]n ,int left,int right){
  12.   int pivot;
  13.   if (left < right) {
  14.    //pivot作为枢轴,较之小的元素在左,较之大的元素在右
  15.    pivot = partition(n, left, right);
  16.    //对左右数组递归调用快速排序,直到顺序完全正确
  17.    quickSort(n, left, pivot - 1);
  18.    quickSort(n, pivot + 1, right);
  19.   }
  20. }

  21. public static int partition(int[]n ,int left,int right){
  22.   int pivotkey = n[left];
  23.   //枢轴选定后永远不变,最终在中间,前小后大
  24.   while (left < right) {

  25.    while (left < right && n[right] >= pivotkey) --right;
  26.    //将比枢轴小的元素移到低端,此时right位相当于空,等待低位比pivotkey大的数补上
  27.    n[left] = n[right];
  28.    while (left < right && n[left] <= pivotkey) ++left;
  29.    //将比枢轴大的元素移到高端,此时left位相当于空,等待高位比pivotkey小的数补上
  30.    n[right] = n[left];

  31.   }
  32.   //当left == right,完成一趟快速排序,此时left位相当于空,等待pivotkey补上
  33.   n[left] = pivotkey;
  34.   return left;
  35. }
  36. }
复制代码

作者: hlhdidi    时间: 2016-6-10 21:17
快速排序~~推荐算法第四版这本书,里面有很详细的解释..




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2