“Tenk på en permutasjon” …av $n!$ mulige Trenger maks $\log n!$ ja-nei-spørsmål
function counting-sort(A, B, k)
let C[0...k] be a new array
for i = 0 to k
C[i] = 0
for j = 1 to A.length
C[A[j]] += 1
for i = 1 to k
C[i] = C[i] + C[i - 1]
for j = A.length downto 1
B[C[A[j]]] = A[j]
C[A[j]] -= 1
Utvid veriområdet
function radix-sort(A, d)
for i = 1 to d
sort* A by digit d
Bryt grensen … denne gang for AC
function bucket-sort(A)
n = A.length
create B[0...n-1]
for i = 0 to n
make B[i] an empty list
for i = 1 to n
add A[i] to B[floor(nA[i])]
for i = 0 to n - 1
sort list B[i] #Bruker insertion sort
concatenate B[0]...B[n - 1]
Bryt grensen for AC … ved å begrense problemet
Hvem er på 10. plass? (f.eks.)
Induksjon/reduksjon
“Quicksort som binærsøk”
function randomized-select(A,p,r,i)
if p == r
return A[p]
q = randomized-partition(A,p,r)
k = q - p + 1
if i == k
return A[q]
else if i < k
return randomized-partition(A,p,q - 1, i)
else
return randomized-partition(A, q + 1, r, i - k)
T(n) = 2n - 1\
T_a(n) = \Theta(n)
$$T_b(n) = \Theta(n)\
Gjenta suksessen! … denne gangen for WC
Trenger god pivot
“Median av medianer”
function partition-around(A,p,r,x)
i = 1
while A[i] != x
i += 1
exchange A[r] and A[i]
return partition(A,p,r)
function select(A, p, r, i)
if P == r
return A[p]
....
function good-partiton(A, p , r)
n = r - p + 1
m = ceil(n / 5)
create B[1...m]
for i = 0 to m - 1
q = p + 5i
sort A[q...q + 4]
B[i] = A[q + 3]
x = select(B, 1, m, floor(m/2))
return partiton-around(A,p,r,x)
$$T(n) = \Theta(n)\