版权声明:欢迎大家转载,指正。 https://blog.csdn.net/yin__ren/article/details/83239974
一、求最大最小值
1. 求最小值
Minimum(A)
min ← A[1]
for i = 2..n
do if A[ i ] < min
then min ← A[ i ]
return min
2. 同时求最大最小值
Min-Max(A)
for i = 1..n / 2
do if A[2i – 1] ≤ A[2i]
then B[i] ← A[2i – 1]
C[i] ← A[2i]
else B[i] ← A[2i]
C[i] ← A[2i – 1]
min ← Minimum(B)
max ← Maximum(C)
return (min, max)
二、随机选择算法
1. 伪代码
//返回数组中第 i 小的元素
RANDOMIZED-SELECT(A, p, r, i )
if p == r
then return A[p]
q ←RANDOMIZED-PARTITION(A, p, r)//随机快速排序中的算法
k ← q - p + 1 (分割中心所在位置)
if i == k //pivot value is the answer
then return A[q]
elseif i < k
then return RANDOMIZED-SELECT(A, p, q-1, i )
else return RANDOMIZED-SELECT(A, q + 1, r, i-k)
2. 时间复杂度