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-kthyang 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,Rsedemikian rupa sehingga semua elemen di Rlebih besar daripada pivotdan Lyang lainnya (minus satu kemunculan pivot). Kemudian semua dilakukan secara rekursif.
O(n)O(n2)
Pivot yang lebih baik adalah median semua median sub array Aukuran 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.