Ch n ph n t trung gian trong 3 ph n t đ ng đ u, đ ng gi a và ọ ầ ử ầ ử ứ ầ ứ ữ
đ ng cu i làm ph n t khóa.ứ ố ầ ử
Ch n ph n t ng u nhiên làm ph n t khóa. (Cách này có th d n ọ ầ ử ẫ ầ ử ể ẫ
đ n kh năng r i vào các tr ng h p đ c bi t)ế ả ơ ườ ợ ặ ệ
2. X p các ph n t nh h n ph n t ch t phía tr c ph n t khóaế ầ ử ỏ ơ ầ ử ố ở ướ ầ ử
3. X p các ph n t l n h n ph n t ch t phía sau ph n t khóa Đ có ế ầ ử ớ ơ ầ ử ố ở ầ ử ể
đ c s phân lo i này thì 2 b c trên, các ph n t s đ c so sánh v i ượ ự ạ ở ướ ầ ử ẽ ượ ớ
khóa và hoán đ i v trí cho nhau ho c cho khóa n u nó l n h n khóa mà l i ổ ị ặ ế ớ ơ ạ
n m tr c khóa, ho c nh h n mà l i n m sau khóa. Áp d ng kĩ thu t nhằ ướ ặ ỏ ơ ạ ằ ụ ậ ư
trên cho m i đo n đó và ti p t c làm v y cho đ n khi m i đo n ch còn 2 ỗ ạ ế ụ ậ ế ỗ ạ ỉ
ph n t . Khi đó toàn b dãy đã đ c s p x pầ ử ộ ượ ắ ế
Quick sort là m t thu t toán d cài đ t, hi u qu trong h u h t các tr ng ộ ậ ễ ặ ệ ả ầ ế ườ
h p và tiêu t n ít tài nguyên h n so v i các thu t toán khác. Đ ph c t p ợ ố ơ ớ ậ ộ ứ ạ
trung bình c a gi i thu t làủ ả ậ O(NlogN).
2. Các b c th c hi n gi i thu tướ ự ệ ả ậ
Giả sử ta có một dãy các phần tử như sau:
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7]
28 16 56 30 17 32 24 18
leR = 0; right = 7; Ở ví dụ này ta lấy một phần tử làm khóa, ở đây mình chọn phần tử khóa là A[(0+7)/2] =
A[3] = 30 Cho i chạy từ trái sang phải, bắt đầu từ vị trí 0 Cho j chạy từ phải sang trái, bắt đầu từ vị trí 7
Quá trình duyệt từ bên trái với biến duyệt i sẽ dừng lại ở 56 (i=2), vì đây không phải là phần tử nhỏ hơn
khóa. Quá trình duyệt từ bên phải với biến duyệt j sẽ dừng lại ở 18 (j=7) vì đây là phần tử nhỏ hơn khóa.
Tiến hành đổi chỗ 2 phần tử cho nhau.
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7]
28 16 18 30 17 32 24 56
Quá trình duyệt Dếp tục. Khóa ở đây vẫn là 30. Ta Dếp tục tăng biến duyệt i và giảm biến duyệt j, nhận
thấy biến duyệt i chạy đến 30 (i=3), còn biến duyệt j dừng lại ở 24 (j=6). Tiến hành đổi chỗ 2 phần tử cho
nhau.