第9章 中位數和順序統計量
9.1 最小值和最大值
尋找集合中的最小值or最大值,必須要做n-1次比較。
同時尋找最小值和最大值不需要2(n-1)次比較,我們將一對輸入元素相互進行比較,然後把較小的與當前最小值比較,較大的與當前最大值比較,這樣每2個元素共需3次比較。所以總的比較次數至多是3(n/2)。
9.2 期望爲線性時間的選擇算法
選擇數組A[p..r]種第i小的元素:
int randomized_select(int a[], int low, int high, int i){
if(low == hight)
return a[low];
q = randomized_partition(a, low, high);
k = q - low + 1;
if(i == k)
return a[q];
else{
if(i < k)
return randomized_select(a, low, q-1 ,i);
else
return randomized_select(a, q+1, low ,i-k);
}
}
9.3 最壞情況爲線性時間的選擇算法
SELECT算法:
1. 將輸入數組的n個元素劃分爲
2. 尋找這
3. 對第2步中找出的
4. 利用修改多的PARTITION 版本,按中位數的中位數x對數組進行劃分。讓k比劃分的低區中的元素數目多1,因此x是第k小的元素,並且有
5. 如果