注,代码是从网上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] + " "); } }