public class QuickSort { /** * @param args */ public static void main(String[] args) { //10, 26, 8, 76, 42, 17, 25, 99, 78 int[] src = {10, 26, 8, 76, 42, 17, 25, 99, 78}; display(src); sort(src, 0, src.length - 1); display(src); } /** * 每次和数组的第一个元素比较大小,从右边遇到第一个比它小的停止,然后从左边开始遇到第一个比他大的停止,然后调换位置 * * @param src 待排序的数组 * @param left 左边开始位置 * @param right 右边结束位置 */ public static void sort(int[] src, int left, int right) { int i = left; int j = right; int midposi = left; int midValue = src[midposi]; while(i <= j) { // 从右边开始遍历,遇到小于第一个元素停止 while(src[j] >= midValue && j > left)j--; // 从左边开始遍历,遇到大于第一个元素停止 while(src[i] <= midValue && i < right)i++; // 交换一下 if(i <= j) { src[midposi] = src[j]; src[j] = src[i]; src[i] = midValue; // 因为是给第一个元素对比的,所以经过交换之后第一个元素的位置发生了变化 midposi = i; midValue = src[midposi]; // 此处++和--,可以减少while里面的循环,其实不这样做也可以 i++; j--; }//完成一次快速排序 // 此时j为上次排序后第一个小于midValue得位置,i为第一个大于midValue的位置,调用递归 if(j > left)sort(src, left, j); if(i < right)sort(src, i, right); } } public static void display(int[] src) { for(int i = 0; i < src.length; ++i) { System.out.print(src[i] + "/t"); } System.out.println(""); } }