/**

 * @author @liugang

 * 快排的算法

 * @param pData 需要排序的数组

 * @param left     左边的位置,初始值为0

 * @param right 右边的位置,初始值为数组长度

 * 选择数组中的一个元素作为标准,将所有比标准小的元素放到左边,

 * 所有比标准大的元素放到右边。

 * 并对左边和右边的元素做一样的快速排序过程。

 

 */

public class Qsort {

 

    public static void QuickSort(int[] pData, int left, int right) {

       int i, j;

       int k = 0;

       int middle, temp;

       i = left;

       j = right;

       middle = pData[left];

       while (true) {

           while ((++i) < right - 1 && pData[i] < middle)

              ;

           while ((--j) > left && pData[j] > middle)

              ;

           System.out.println(i + "," + j);

           if (i >= j)

              break;

           temp = pData[i];

           pData[i] = pData[j];

           pData[j] = temp;

 

       }

 

       pData[left] = pData[j];

       pData[j] = middle;

 

       for (k = 0; k < pData.length; k++) {

           System.out.print(pData[k] + " ");

       }

       System.out.println();

 

       if (left < j)

           QuickSort(pData, left, j);

 

       if (right > i)

           QuickSort(pData, i, right);

    }

 

    public static void main(String[] args) {

       int[] pData = new int[10];

       for (int i = 0; i < 10; i++)

           pData[i] = (int) (Math.random() * 100);

 

       for (int i = 0; i < pData.length; i++) {

           System.out.print(pData[i] + " ");

       }

       System.out.println();

 

       Qsort.QuickSort(pData, 0, pData.length);

 

       System.out.println("\n***********************");

 

       for (int i = 0; i < pData.length; i++)

           System.out.print(pData[i] + " ");

    }

 

}

posted on 2011-03-10 22:37  魔战  阅读(248)  评论(0编辑  收藏  举报