public static void quickSort(RS[] arrRS,int low,int high){
// 保存【分割點】
int partition;
// 【段長】大於1
if(low < high){
// 一次分割,獲得【分割點】 和 兩個【子段】
partition = quickPartition(arrRS,low,high);
//【遞歸】兩個子段
quickSort(arrRS, low, partition-1);
quickSort(arrRS, partition+1, high);
}
}
//分割
private static int quickPartition(RS[] arrRS, int left, int right) {
// 拿起左邊第一個,作【標尺】
RS tempRS = arrRS[left];
// 【段長】大於1,未結束
while (left < right) {
/*################ 左 <<=== 右 ##################*/
while (left < right && arrRS[right].val>=tempRS.val) {
right--;
}
if (left < right) { // 若未結束,右邊大的,放到左邊 left 索引處,left 右移
arrRS[left] = arrRS[right];
left ++;
}
/*################ 左 ===>> 右 ##################*/
while (left < right && arrRS[left].val<tempRS.val) {
left++;
}
if (left < right) { // 若未結束,左邊小的,放到右邊 right 索引處,right 左移
arrRS[right] = arrRS[left];
right --;
}
}
// 【標尺】歸【分割點】
arrRS[left] = tempRS;
// 返回分割點
return left;
}