Java排序算法之--快速算法--快速上手

何为快速算法:它是冒泡排序的改进~

基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列


算法的整个处理过程如下:

Java排序算法之--快速算法--快速上手



核心思想:基准数不断不断归位的过程(右边大于基准数,左边小于基准数):

当基准数为左边第一个数时,(从右边向左开始扫描,当扫描到小于基准数的时候,暂停扫描,此时数组下标为j

              轮到左边往右边扫描,当扫描到大于基准数的时候,暂停扫描,此时数组下标为i,交换i与j下标的数值),继续“()”的步骤。

        什么时候截止呢?当i=j时,将基准数base与i所指的数交换,然后不断的迭代这个过程。

当基准数为左边第一个数时,(从右边向左开始扫描,当扫描到小于基准数的时候,暂停扫描,此时数组下标为j

              轮到左边往右边扫描,当扫描到大于基准数的时候,暂停扫描,此时数组下标为i,交换i与j下标的数值),继续“()”的步骤。

        什么时候截止呢?当i=j时,将基准数base与i所指的数交换,然后不断的迭代这个过程。


算法实现如下:

  1. public static void quickSort(int [] a, int left, int right) {  
  2.     int i, j, t, base;  
  3.     if (left > right)  
  4.         return;  
  5.     base = a[left]; // base中存的就是基准数  
  6.     i = left;       // 设置左右两个参数  
  7.     j = right;  
  8.     while (i != j) {  
  9.         //要先从右边开始找  
  10.         while (a[j] >= base && i < j)  
  11.             j--;  
  12.         // 再找左边的  
  13.         while (a[i] <= base && i < j)  
  14.             i++;  
  15.         // 交换两个数在数组中的位置  
  16.         if (i < j) {  
  17.             t = a[i];  
  18.             a[i] = a[j];  
  19.             a[j] = t;  
  20.         }  
  21.     }  
  22.     // 最终将基准数归位  
  23.     a[left] = a[i];  
  24.     a[i] = base;  
  25.   
  26.     quickSort(a, left, i - 1);// 继续处理左边的,这里是一个递归的过程  
  27.     quickSort(a, i + 1, right);// 继续处理右边的 ,这里是一个递归的过程  
  28. }  
http://blog.****.net/sunhuaqiang1/article/details/52059322有时间可参考此链接