Sắp xếp trộn

Một phần của tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật (2013): Phần 2 (Trang 25 - 26)

Để tiến hành sắp xếp trộn, đầu tiên ta coi các phần tử của dãy như các dãy con 1 phần tử. Tiến hành trộn từng cặp 2 dãy con này để được các dãy con được sắp gồm 2 phần tử. Tiếp tục tiến hành trộn từng cặp dãy con 2 phần tử đã sắp để tạo thành các dãy con được sắp gồm 4 phần tử v.v. Quá trình lặp lại cho tới khi toàn bộ dãy được sắp.

Ta xét quá trình sắp xếp trộn với dãy ở phần trước.

32 17 49 98 06 25 53 61

Đầu tiên, coi mỗi phần tử của dãy như 1 dãy con đã sắp gồm 1 phần tử. Tiến hành trộn từng cặp dãy con 1 phần tử với nhau:

Sau bước này ta được các dãy con đã sắp gồm 2 phần tử. Tiến hành trộn các cặp dãy con đã sắp gồm 2 phần tửđể tạo thành dãy con được sắp gồm 4 phần tử.

17 32 49 98 06 25 53 61

Sau bước này ta được các dãy con đã sắp gồm 4 phần tử. Tiến hành trộn 2 dãy con đã sắp gồm 4 phần tử.

17 32 49 98 06 25 53 61

Cuối cùng, ta có toàn bộ dãy đã được sắp:

06 17 25 32 49 53 61 98

Cài đặt cho thuật toán merge_sort bằng đệ qui như sau :

void merge_sort(int *a, int left, int right){ int middle;

if (right<=left) return; middle=(right+left)/2;

merge_sort(a, left, middle); merge_sort(a, middle+1, right); merge(a, left, middle ,right); }

Trong thủ tục này, đầu tiên ta tiến hành chia dãy cần sắp làm 2 nửa, sau đó thực hiện lời gọi đệ

qui merge_sort cho mỗi nửa dãy. Hai lời gọi đệ qui này đảm bảo rằng mỗi nửa dãy này sẽđược sắp. Cuối cùng, thủ tục merge được gọi để trộn 2 nửa dãy đã sắp này.

Một phần của tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật (2013): Phần 2 (Trang 25 - 26)

Tải bản đầy đủ (PDF)

(94 trang)