【快速】排序, T(n) = O(nlgn),O(n^2) S(n) = O(lgn) --- 不穩定

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;
	}

点赞