Sắp xếp trộn

Một phần của tài liệu cau truc du lieu va giai thuat giaotrinh cuuduongthancong com (Trang 118 - 120)

Để 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.

Đầ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:

32 17 49 98 06 25 53 61

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 cau truc du lieu va giai thuat giaotrinh cuuduongthancong com (Trang 118 - 120)

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

(153 trang)