/**
* @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] + " ");
}
}