Ini adalah kasus khusus dari algoritma seleksi yang dapat menemukan th elemen terkecil dari sebuah array dengan k adalah setengah dari ukuran array. Ada implementasi yang linier dalam kasus terburuk.kk
Algoritma seleksi generik
Pertama mari kita lihat suatu algoritma find-kth
yang menemukan th elemen terkecil dari sebuah array:k
find-kth(A, k)
pivot = random element of A
(L, R) = split(A, pivot)
if k = |L|+1, return pivot
if k ≤ |L| , return find-kth(L, k)
if k > |L|+1, return find-kth(R, k-(|L|+1))
Fungsi split(A, pivot)
mengembalikan L,R
sedemikian rupa sehingga semua elemen di R
lebih besar daripada pivot
dan L
yang lainnya (minus satu kemunculan pivot
). Kemudian semua dilakukan secara rekursif.
O(n)O(n2)
Pivot yang lebih baik adalah median semua median sub array A
ukuran 5, dengan menggunakan prosedur memanggil pada larik median ini.
find-kth(A, k)
B = [median(A[1], .., A[5]), median(A[6], .., A[10]), ..]
pivot = find-kth(B, |B|/2)
...
O(n)
Perhatikan bahwa sebagian besar waktu menggunakan pivot acak lebih cepat.