1 public static void quickSort(RS[] arrRS,int low,int high){
2
3 // 保存【分割点】
4 int partition;
5
6 // 【段长】大于1
7 if(low < high){
8
9 // 一次分割,获得【分割点】 和 两个【子段】
10 partition = quickPartition(arrRS,low,high);
11
12 //【递归】两个子段
13 quickSort(arrRS, low, partition-1);
14 quickSort(arrRS, partition+1, high);
15 }
16 }
17
18 //分割
19 private static int quickPartition(RS[] arrRS, int left, int right) {
20
21 // 拿起左边第一个,作【标尺】
22 RS tempRS = arrRS[left];
23
24 // 【段长】大于1,未结束
25 while (left < right) {
26
27 /*################ 左 <<=== 右 ##################*/
28 while (left < right && arrRS[right].val>=tempRS.val) {
29 right--;
30 }
31 if (left < right) { // 若未结束,右边大的,放到左边 left 索引处,left 右移
32 arrRS[left] = arrRS[right];
33 left ++;
34 }
35
36 /*################ 左 ===>> 右 ##################*/
37 while (left < right && arrRS[left].val<tempRS.val) {
38 left++;
39 }
40 if (left < right) { // 若未结束,左边小的,放到右边 right 索引处,right 左移
41 arrRS[right] = arrRS[left];
42 right --;
43 }
44
45 }
46
47 // 【标尺】归【分割点】
48 arrRS[left] = tempRS;
49
50 // 返回分割点
51 return left;
52 }