Tài liệu tham khảo bài giảng môn Cấu trúc dữ liệu - Phần 3 Tìm kiếm và sắp xếp
Trang 37
Bài toán tìm ki m
Bài toán
Cho m ng 1 chi u A g m N ph n t nguyên Cho bi t s
nguyên x có t n t i trong A hay không? N u có thì cho bi t
i
Trang 6 Cho m ng 1 chi u A g m N ph n t nguyên Hãy s p x p
m ng A sao cho các ph n t c a A có th t không gi m
(A[0] ≤ A[1] ≤ … ≤ A[N - 1])
Input: M ng A g m N ph n t nguyên
Ouput: M ng A g m N ph n t nguyên v i th t không
gi m
Trang 13(có giá tr nh h n) s đ c n i lên trên
Sau m i đ t n i b t, ph n t nh nh t s đ c n i lên trên
Trang 18int x = A[i], pos = i - 1;
while (pos >= 0 && A[pos] > x)
Trang 19Dãy 1: A[0], A[h], A[2h], …
Dãy 2: A[1], A[1 + h], A[1 + 2h], …
…
Dãy h: A[h - 1], A[h – 1 + h], A[h - 1 + 2h], …
Trang 2063
Ý t ng
V i m i b c h, áp d ng thu t toán s p x p chèn tr c ti p
cho t ng dãy con
Làm m n d n các dãy con b ng cách gi m đ dài c a b c
Chia dãy ban đ u thành len dãy con (các ph n t cách
nhau len v trí trong dãy ban đ u)
S p x p t ng dãy con b ng ph ng pháp chèn tr c ti p
B c 3: Xét len có đ dài là giá tr h[i] ti p theo và l p l i
b c 2 cho đ n khi xét đ n đ dài len = h[k – 1]
Trang 22int len = h[step];
for (int i = len; i < N; i++)
int x = A[i], pos = i – len;
while (pos >= 0 && A[pos] > x)
Trang 23 T n d ng thông tin có đ c trong quá trình s p x p b c
tr c cho các thao tác th c hi n các b c ti p theo
Tìm ra c u trúc d li u cho phép tích l y thông tin v vi c
Trang 24i [l, r], A[i] ≥ A[2*i + 1] và A[i] ≥ A[2*i + 2]
Các c p ph n t (A[i], A[2*i + 1]) và (A[i], A[2*i + 2])
đ c g i là các c p ph n t liên đ i
7 2*i + 2
4 2*i + 1
Trang 30112
Cài đ t hàm Heap Sort
void HeapSort(int A[], int N)
Trang 31 Ch n giá tr c a m t ph n t thu c dãy làm ch t Phân
ho ch dãy c n s p thành 2 dãy con
Dãy bên trái g m các ph n t có giá tr nh h n ho c
Dãy sau khi đ c phân ho ch
S p x p dãy bên trái và dãy bên ph i thì dãy ban đ u s có
Trang 32Ch t có giá tr trung v d n đ n s ph n t c a dãy con
bên trái và bên ph i có s l ng t ng đ ng nhau
Ch n giá tr c a ph n t v trí gi a dãy làm giá tr ch t
v trí gi a dãy = (v trí đ u dãy + v trí cu i dãy)/2
L p t ng i thêm 1 khi A[i] < x
L p gi m j đi 1 khi A[j] > x
Trang 33dãy ban đ u thành các dãy con có th t
Th c hi n tr n các dãy con v i nhau nh m gi m b t s dãy
Trang 34 B c 1: Tách dãy A[0], A[1], …, A[N – 1] thành các đ ng
ch y và phân ph i t ng đ ng ch y cho 2 dãy B, C theo
nguyên t c luân phiên
B c 2: th c hi n tr n đ gi m s đ ng ch y trên dãy A
Tr n l n l t 1 đ ng ch y c a B v i 1 đ ng ch y c a
C (tính t trái qua) t o thành m t đ ng ch y trên A
N u dãy nào còn đ ng ch y trong khi dãy kia đã h t
Trang 36 Nh c đi m c a ph ng pháp tr n là đòi h i thêm không
gian b nh ph đ l u các dãy con nên khó áp d ng cho
nh ng tr ng h p dãy c n s p có kích th c l n
Ph ng pháp tr n th ng đ c ng d ng đ s p x p trên
danh sách liên k t ho c s p x p trên b nh ngoài
Trang 37139
T ng k t các ph ng pháp s p x p
Selection sort O(N2)
Interchange sort O(N2)
Bubble sort O(N2)
Insertion sort O(N2)
Shell sort
Heap sort O(N.logN)
Quick sort O(N.logN)
Merge sort O(N.logN)