注,代码是从网上down的,本人做了思想和关键语句的注释
package com.sufa.test;
public class QuickSort {
/*
* 快速算法
* 取一个key值,将序列分为左区间、右区间,其中左区间的数均小于key值,右区间的数均大于key值
* 递归对左区间和右区间进行排序
* */
public static void QuickSort(int[] pData, int left, int right) {
int i, j;
int middle, temp;
i = left;
j = right;
//选取第一个值作为中间值
middle = pData[left];
while (true) {
//过滤掉左边比key值小的数
while ((++i) < right - 1 && pData[i] < middle)
;
//过滤掉右边比key值大的数
while ((--j) > left && pData[j] > middle)
;
//设置边界条件
if (i >= j)
break;
//调整两个区间的值,或者将右区间的大值调到左边,或者将左区间的小值调到右边
temp = pData[i];
pData[i] = pData[j];
pData[j] = temp;
}
//将KEY值放入适当的位置
pData[left] = pData[j];
pData[j] = middle;
//分别对左右区间进行递归快速排序
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] + " ");
QuickSort(pData, 0, pData.length);
System.out.println("\n***********************");
for (int i = 0; i < pData.length; i++)
System.out.print(pData[i] + " ");
}
}