S p x p d a tn phân ho ch ế
quicksort
Quicksort- ý t ngưở
Ð s p x p dãy ế a1, a2, ..., an gi i thu t QuickSort d a
trên vi c phân ho ch dãy ban đ u thành hai ph n :
Dãy con 1: G m các ph n t a1.. ai có giá tr không
l n h n ơ x
Dãy con 2: G m các ph n t ai .. an có giá tr không
nh h n ơ x
v i x là giá tr c a m t ph n t tùy ý trong dãy ban đ u.
Sau khi th c hi n phân ho ch, dãy ban đ u đ c phân ượ
thành 3 ph n:
1. ak < x , v i k = 1..i
2. ak = x , v i k = i..j
3. ak > x , v i k = j..N
Quicksort-ý t ngưở
trong đó dãy con th 2 đã có th t ,
n u các dãy con 1 và 3 ch có 1 ph n t thì chúng ế
cũng đã có th t , khi đó dãy ban đ u đã đ c s p. ượ
Ng c l i, n u các dãy con 1 và 3 có nhi u h n 1 ượ ế ơ
ph n t thì dãy ban đ u ch có th t khi các dãy
con 1, 3 đ c s p. ượ
Ð s p x p dãy con 1 và 3, ta l n l t ti n hành vi c ế ượ ế
phân ho ch t ng dãy con theo cùng ph ng pháp ươ
phân ho ch dãy ban đ u v a trình bày .
ak<x ak=x ak>x
1 I j N
Quicksort- gi i thu t
Gi i thu t phân ho ch dãy al, al+1, ., ar thành 2 dãy
con:
B c 1ướ : Ch n tùy ý m t ph n t a[k] trong dãy là giá tr
m c, l k r:
x = a[k]; i = l; j = r;
B c 2ướ : Phát hi n và hi u ch nh c p ph n t a[i], a[j]
n m sai ch :
B c 2aướ : Trong khi (a[i]<x) i++;
B c 2bướ : Trong khi (a[j]>x) j--;
B c 2cướ : N u i< j ế// a[i] x a[j] mà a[j] đ ng sau a[i]
Hoán v (a[i],a[j]);
B c 3ướ :
N u i < j:ếL p l i B c 2 ướ .//ch a xét h t m ngư ế
N u i ế j: D ng
Quicksort- nh n xét
V nguyên t c, có th ch n giá tr m c x là m t ph n t
tùy ý trong dãy, nh ng đ đ n gi n, d di n đ t gi i ư ơ
thu t, ph n t có v trí gi a th ng đ c ch n, khi đó k ườ ượ
= (l +r)/ 2
Giá tr m c x đ c ch n s có tác đ ng đ n hi u qu ượ ế
th c hi n thu t toán vì nó quy t đ nh s l n phân ế
ho ch. S l n phân ho ch s ít nh t n u ta chon đ c ế ượ
x là ph n t median c a dãy. Tuy nhiên do chi phí xác
đ nh ph n t median quá cao nên trong th c t ng i ta ế ườ
không ch n ph n t này mà ch n ph n t n m chính
gi a dãy làm m c v i hy v ng nó có th g n v i giá tr
median