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 }