1 /**
2 * 快速排序的简介写法(完美)
3 * @param num 目标排序数组
4 * @param leftIndex 每次处理的左端索引
5 * @param rightIndex 每次处理的右端索引
6 */
7 public static void quickSort2(int[] num,int leftIndex,int rightIndex){
8 if (leftIndex>rightIndex)
9 return;
10 int leftI=leftIndex;
11 int rightI=rightIndex;
12 //基准数,依次将数组中的数分为两部分
13 int midNum=num[leftIndex];
14 int temp=0;
15 //递归出口
16 while (leftI<rightI){
17 //寻找左端第一个大于基准数的索引
18 while (num[rightI]>=midNum&&leftI<rightI){
19 rightI--;
20 }
21 //寻找右端第一个大于基准数的索引,注意最后的两索引只会相等
22 while (num[leftI]<=midNum&&leftI<rightI){
23 leftI++;
24 }
25 //交换左右端数
26 if (leftI<rightI){
27 temp=num[leftI];
28 num[leftI]=num[rightI];
29 num[rightI]=temp;
30 }
31 }
32 //基准数交换。应当与左端最大的数交换
33 num[leftIndex]=num[leftI];
34 num[leftI]=midNum;
35 //递归处理左右的数组
36 quickSort2(num,leftIndex,rightI-1);
37 quickSort2(num,leftI+1,rightIndex);
38 }