QuickSort

来源:互联网 发布:mysql text 性能 编辑:程序博客网 时间:2024/05/07 08:40

取中间的元素s作比较,同样的先得往右找比s大的索引 i,然后往左找比s小的索引 j,只要两边的索引还没有交叉(也就i=j),就交换 i 与 j 的元素值。这里不用再进行轴的交换,因为在寻找交换的过程中,轴位置的元素也会参与交换的动作,轴已经成为一个抽象的概念,代表的是一个数值而已。

Java代码 复制代码
  1. public static void QuickSort(int[] number)   
  2. {   
  3.     QuickSort(number, 0, number.length - 1);   
  4. }   
  5.   
  6. /**  
  7.  * 将轴设定为中间的元素,依这个元素作基准进行比较,这可以增加快速排序法的效率  
  8.  * @param number 待排序数组  
  9.  * @param left 最小index  
  10.  * @param right 最大index  
  11.  */  
  12. private static void QuickSort(int[] number, int left, int right)   
  13. {   
  14.     if (left < right)   
  15.     {   
  16.         int s = number[(left + right) / 2];   
  17.         int i = left - 1;//中间元素作为基准,从0开始比较   
  18.         int j = right + 1;   
  19.   
  20.         while (true)   
  21.         {   
  22.             // 1. 令索引 i 从数组左方往右方找,直到找到大于(不小于) s 的数的索引   
  23.             while (number[++i] < s){}   
  24.             // 2. 令索引 j 从数组右方往左方找,直到找到小于(不大于) s 的数的索引   
  25.             while (number[--j] > s){}   
  26.             // 3. 如果 i >= j,则退出循环   
  27.             if (i >= j) break;   
  28.             // 4. 如果 i < j,则交换索引i与j两处的值   
  29.             swap(number, i, j);   
  30.         }   
  31.         // 5. 对轴左边进行递归   
  32.         QuickSort(number, left, i - 1);    
  33.         // 6. 对轴右边进行递归   
  34.         QuickSort(number, j + 1, right);    
  35.     }   
  36. }   
  37.   
  38. private static void swap(int[] number, int i, int j)   
  39. {   
  40.     int t;   
  41.     t = number[i];   
  42.     number[i] = number[j];   
  43.     number[j] = t;   
  44. }  
原创粉丝点击