A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑猫的消失 中级黑马   /  2016-6-9 23:16  /  890 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家一起来分析分析这种快速排序的思想吧,也许会让你在碰到其他算法题的时候,有新的思路
  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. }
复制代码

1 个回复

倒序浏览
快速排序~~推荐算法第四版这本书,里面有很详细的解释..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马