Heap sort Đánh giá thuật toán: - Độ phức tạp của giải thuật là Onlgn - Ưu điểm: Nhanh, hiệu quả, và không đòi hỏi về không gian bộ nhớ - Nhược điểm: Khi dãy số đã sắp xếp có thứ tự thì g
Trang 1Heap sort
Đánh giá thuật toán:
- Độ phức tạp của giải thuật là O(nlgn)
- Ưu điểm: Nhanh, hiệu quả, và không đòi hỏi về không gian bộ nhớ
- Nhược điểm: Khi dãy số đã sắp xếp có thứ tự thì giải thuật này tỏ ra không hiệu quả.
Trang 2Heap sort
Bài tập: Cho dãy số sau:
A= [23, 17, 21, 3, 42, 9, 13, 1,2,7,35,4]
Trình bày các bước sắp xếp dãy A theo Heapsort
Trang 3MERGE SORT
Trang 4Merge sort đệ qui
Merge sort đệ qui:
Khi gọi đệ quy, chương trình phân chia ra các mảng con, rồi tiếp tục sắp xếp đệ quy mảng con thứ nhất
34
Trang 5Ví dụ:
35
42 23 74 11 65 58 94 36 99 87
42 23 74 65 11 58 94 36 99 87
74 65 11
11 65
42 23
11 65
74
11 65
11 23 42 65 74
Tách
Tr ộ n
23 42
Trang 6Merge sort đệ qui
36
i:= left; j:= mid+1; k:= left ; //Kh ởi tạo vị trí con trỏ
while ((i<=mid) &&(j<=right))
{ if (a[i] <= a[j])
{ b[k] = a[i]; i++; }
else { b[k] = a[j]; j++; }
k++;
}
//L ấy phần tử nhỏ hơn trong hai
ph ần tử a[i], a[j] vào dãy b
while (j < right)
{ j++; k++; b[k] = a[j] }
// đặt các phần tử còn lại của dãy
a[m+1,r] vào cuối dãy b
while (i < mid)
{ i++; k++; b[k]= a[i] }
// đặt các phần tử còn lại của dãy
a[1,m] vào cuối dãy b
for (k= left; k<= right; k++) a[k]:= b[k]; //gán b[l,r] tr ở lại a[l,r]
Trang 7Merge sort đệ qui
}
37
Trang 8Merge sort trực tiếp
Merge sort trực tiếp:
nguyên tắc luân phiên từng nhóm k phần tử
- B3: Trộn từng cặp dãy con gồm k phần tử của dãy
b,c vào a
- B4: k=k*2;
- Nếu k <n thì quay lại B2
- Ngược lại: Dừng
38
Trang 9Merge sort trực tiếp
Ví dụ:
39
Trang 10Merge sort trực tiếp
40