Như vậy, việc học Cấu trúc dữ liệu & giải thuật là một việc rất quan trọng.Trong môn Cấu trúc dữ liệu và giải thuật, các thuật toán sắp xếp là một trongnhững kiến thức nền tảng cơ bản nh
Trang 1HỌC VIỆN NGÂN HÀNG KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU & GIẢI THUẬT
MÃ HỌC PHẦN: 231IS07A01
ĐỀ TÀI THUẬT TOÁN SẮP XẾP SHAKER SORT
NHÓM 7
12/2023
Trang 2HỌC VIỆN NGÂN HÀNG KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU & GIẢI THUẬT
MÃ HỌC PHẦN: 231IS07A01
ĐỀ TÀI THUẬT TOÁN SẮP XẾP SHAKER SORT
Giáo viên hướng dẫn: ThS Nguyễn Thanh Thụy Thành viên nhóm:
Trang 3MỨC ĐỘ ĐÓNG GÓP CỦA CÁC THÀNH VIÊN
STT MÃ SV HỌ TÊN MỨC ĐỘ ĐÓNG
GÓP
1 25A4041551 Trần Phúc Hưng 20%
2 25A4041531 Nguyễn Hải Dương 20%
3 25A4041902 Nguyễn Thiên Phú 20%
4 25A4041895 Nguyễn Đức Mạnh 20%
5 25A4041546 Mai Thái Huy 20%
Trang 4LỜI CAM ĐOANChúng tôi xin cam đoan các thông tin có được trong bài tập lớn là sản phẩm củanhóm chúng tôi Các kiến thức và thông tin trong bài không đạo văn, không bịa đặt,thông đồng hay sao chép lại từ nhóm khác Toàn bộ nội dung của bài tập lớn đượctrình bày là của các cá nhân trong nhóm hoặc được thu thập và tổng hợp từ nhiềunguồn khác nhau Các tài liệu tham khảo đều có xuất xứ rõ ràng và được trích dẫn hợppháp Chúng tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quyđịnh cho lời cam đoan của nhóm.
Thành Phố Hà Nội, ngày 10/12/2023
Trang 5MỤC LỤC
LỜI MỞ ĐẦU 7
CHƯƠNG 1: GIỚI THIỆU VỀ THUẬT TOÁN SẮP XẾP SHAKER SORT 1
1.1 Lý do chọn đề tài 1
1.2 Thông tin về thuật toán sắp xếp Shaker Sort 1
CHƯƠNG 2: THUẬT TOÁN SẮP XẾP SHAKER SORT 3
2.1 Ý tưởng thuật toán (Agrawal, 2023): 3
2.2 Các bước hoạt động của thuật toán (Quoc_Khanh_Tran, 2022) 3
2.3 Code thuật toán Shaker Sort (C++) 4
2.4 Minh họa thuật toán (Agrawal, 2023) 4
2.5 Độ phức tạp của thuật toán Shaker Sort 12
2.5.1 Độ phức tạp: 12
2.5.2 Số lần hoán vị: 12
2.5.3 Số lần so sánh: 12
2.6 Ưu và nhược điểm của thuật toán sắp xếp Shaker Sort 12
2.6.1 Ưu điểm 12
2.6.2 Nhược điểm 12
KẾT LUẬN 13
TÀI LIỆU THAM KHẢO 14
Trang 6DANH MỤC HÌNH ẢNH
HÌNH ẢNH 1: CHARLES ANTONY RICHARD HOARE 1
HÌNH ẢNH 2: SHAKER ORT 4 S HÌNH ẢNH 3: THUẬT TOÁN SẮP XẾP MẢNG TỪ PHẢI QUA TRÁI BẮT ĐẦU TỪ VỊ TRÍ = RIGHT 5
HÌNH ẢNH 4: ĐỔI CHỖ 3 VÀ 8 5
HÌNH ẢNH 5: CẬP NHẬT K 6
HÌNH ẢNH 6: ĐỔI CHỖ 3 VÀ 5 6
HÌNH ẢNH 7: CẬP NHẬT K 7
HÌNH ẢNH 8: ĐỔI CHỖ 3 VÀ 9 7
HÌNH ẢNH 9: CẬP NHẬT K VÀ CẬP NHẬT LEFT SAU KHI CHẠY HẾT ĐIỀU KIỆN TRONG VÒNG LẶP 8
HÌNH ẢNH 10: THUẬT TOÁN SẮP XẾP MẢNG TỪ TRÁI QUA PHẢI BẮT ĐẦU TỪ VỊ TRÍ = LEFT 8
HÌNH ẢNH 11: ĐỔI CHỖ 9 VÀ 5 9
HÌNH ẢNH 12: CẬP NHẬT K 9
HÌNH ẢNH 13: ĐỔI CHỖ 9 VÀ 8 10
HÌNH ẢNH 9: CẬP NHẬT K VÀ CẬP NHẬT RIGHT SAU KHI CHẠY HẾT ĐIỀU KIỆN TRONG VÒNG LẶP 10
HÌNH ẢNH 10: MẢNG ĐÃ SẮP XẾP CẬP NHẬT K VÀ CẬP NHẬT LEFT RIGHT VÀ THOÁT, , VÒNG LẶP 11
HÌNH ẢNH 11: MẢNG ĐÃ SẮP XẾP CẬP , NHẬT K CẬP , NHẬT LEFT RIGHT VÀ , THOÁT VÒNG LẶP 11
Trang 7LỜI MỞ ĐẦU
Từ lâu, Cấu trúc dữ liệu và giải thuật luôn là một trong những kiến thức quantrọng trong ngành Công nghệ thông tin nói chung Dưới sự kiểm soát của con người,Cấu trúc dữ liệu và giải thuật đang góp phần tăng tốc độ phát triển trong việc quản lýcủa con người lên một tầm cao mới Tuy nhiên, để sử dụng Cấu trúc dữ liệu và giảithuật, ta phải biết cách sử dụng Cấu trúc dữ liệu & giải thuật một cách đúng đắn, tối ưuthì mới có thể giải lớn trong Công nghệ thông tin nói riêng và đời sống xã hội nóichung Như vậy, việc học Cấu trúc dữ liệu & giải thuật là một việc rất quan trọng.Trong môn Cấu trúc dữ liệu và giải thuật, các thuật toán sắp xếp là một trongnhững kiến thức nền tảng cơ bản nhất Vì có hứng thú với thuật toán sắp xếp ShakerSort, nhóm chúng tôi đã quyết định nghiên cứu và phân tích thuật toán này bằng nhữngkiến thức đã học từ môn Cấu trúc dữ liệu & giải thuật và tìm hiểu trên các nền tảngInternet
Là những sinh viên của Khoa công nghệ thông tin, tuy chưa có nhiều kinhnghiệm và kiến thức về chuyên ngành nhưng trong bộ môn Cấu trúc dữ liệu & giảithuật đã giúp chúng tôi đã có cơ hội được làm việc nhóm cùng nhau để tìm tòi, khaithác kiến thức về môn học Cấu trúc dữ liệu và giải thuật Dưới đấy là bản báo cáo củanhóm chúng tôi về đề tài “Thuật toán sắp xếp Shaker Sort”
Trang 8CHƯƠNG 1: GIỚI THIỆU VỀ THUẬT TOÁN SẮP XẾP SHAKER SORT
1.1 Lý do chọn đề tài
Cấu trúc dữ liệu và giải thuật là một trong những bộ môn quan trọng trongngành Công nghệ thông tin nói chúng và chuyên ngành Khoa học máy tính nói riêng.Trong bộ môn này, chúng ta sẽ được tiếp thu những kiến thức nền tảng vững chắcnhằm hiểu rõ cách thức hoạt động của máy tính cũng như có khả năng giải quyết cácbài toán một cách hiệu quả
Trong môn Cấu trúc dữ liệu và giải thuật, các thuật toán sắp xếp là những kiếnthức cơ bản để giải quyết các bài toán sắp xếp Một trong những thuật toán sắp xếpđược phát triển chính là Shaker Sort Tuy không phải là một thuật toán sắp xếp nổitiếng nhưng thuật toán Shaker Sort vẫn được đưa vào chương trình giảng dạy ở mứcĐại Học của môn Cấu trúc dữ liệu và giải thuật Vì sự hứng thú với thuật toán sắp xếpShaker Sort, nhóm chúng tôi quyết định chọn thuật toán này làm đề tài cho bài tập lớnlần này
1.2 Thông tin về thuật toán sắp xếp Shaker Sort
Charles Antony Richard Hoare là một nhà khoa máy tính người Anh nổi tiếng.Nhắc đến ông, người ta sẽ nghĩ ngay đến người đã phát triển ra thuật toán Quick Sort,một trong những thuật toán sắp xếp phổ biến nhất trên thế giới Ngoài ra, ông cũngchính là người đã đạt được nhiều giải thưởng, trong đó có giải thưởng Turing danh giácho các nhà khoa học máy tính Ngoài thuật toán Quick Sort, ông cũng là người đãphát triển thuật toán sắp xếp Shaker Sort
Hình ảnh 1: Charles Antony Richard Hoare
1
Trang 9Năm 1962, ông đã nghiên cứu và phát triển ra thuật toán Shaker Sort Đây làmột thuật toán sắp xếp đơn giản được phát triển và cải tiến từ một thuật toán phổ biếnkhác là Bubble Sort Bubble Sort hoạt động bằng cách duyệt qua mảng từ đầu cho đếncuối, sau đó so sánh các phần tử liền kề và hoán vị chúng nếu chúng không được sắpxếp theo thứ tự Shaker Sort có phương thức hoạt động khá tương tự như Bubble Sort,tuy nhiên nó sẽ duyệt qua mảng hai lần, một lần duyệt từ đầu cho đến cuối và một lầnngược lại Trong khi duyệt, thuật sẽ hoán vị các phần tử liền kề nếu chúng không đượcsắp xếp theo thứ tự (Hoare, 1962).
2
Trang 10CHƯƠNG 2: THUẬT TOÁN SẮP XẾP SHAKER SORT
2.1 Ý tưởng thuật toán (Agrawal, 2023):
Như đã đề cập ở trên, Shaker Sort sẽ duyệt qua mảng hai lần, một lần duyệt từđầu cho đến cuối và một lần ngược lại Trong khi duyệt, thuật sẽ hoán vị các phần tửliền kề nếu chúng không được sắp xếp theo thứ tự Ta có thể hình dung như sau:Trong mỗi lần sắp xếp, Shaker Sort sẽ duyệt mảng 2 lượt từ 2 phía khác nhau:
- Lượt đi: thuật toán đẩy phần tử nhỏ về đầu mảng
- Lượt về: đẩy phần tử lớn về cuối mảng
Trong khi thực hiện mỗi lượt sắp xếp, thuật toán sẽ ghi nhận lại vị trí của phần
tử đã sắp xếp để tránh các phép so sánh thừa
2.2 Các bước hoạt động của thuật toán (Quoc_Khanh_Tran, 2022)
Giả dụ ta cần sắp xếp theo thứ tự từ nhỏ đến lớn cho một mảng gồm n phần tử.Thuật toán Shaker Sort có 2 cách duyệt, để dễ hiểu nhất ta nên duyệt ngược mảng từphải qua trái
Cách duyệt từ trái qua phải cũng tương tự và chỉ có một sự thay đổi nhỏ.Bước 1: Khởi tạo các biến sau:
- left = 0; //Vị trí phần tử bên trái của mảng
- right = n – 1; //Vị trí phần tử bên phải của mảng
- k = n – 1; //Ghi nhận vị trí phần tử
Bước 2: Duyệt mảng từ đầu tới cuối với điều kiện left < right:
Bước 2a:
i = right
Trong khi (i > left) thực hiện
Nếu a[i] < a[i – 1]: Swap(a[i], a[i – 1]);
Trong khi (i < right) thực hiện
Nếu a[i] > a[i + 1]: Swap(a[i], a[i + 1]);
k = i;
i++;
3
Trang 11Giả dụ ta cần sắp xếp theo thứ tự từ nhỏ đến lớn cho một mảng gồm 5 phần tử
là 1, 9, 5, 3, 8 Lưu ý: Mảng xuất phát từ vị trí 0 Thuật toán Shaker Sort sẽ được minhhọa bằng hình ảnh như sau:
4
Trang 12Hình ảnh 4: đổi chỗ 3 và 8
5
Trang 13Hình ảnh 6: đổi chỗ 3 và 5
6
Trang 14Hình ảnh 8: đổi chỗ 3 và 9
7
Trang 15Hình ảnh 10: Thuật toán sắp xếp mảng từ trái qua phải bắt đầu từ vị trí = left
8
Trang 16Hình ảnh 12: cập nhật k
9
Trang 17Hình ảnh 9: cập nhật k và cập nhật right sau khi chạy hết điều kiện trong vòng lặp
10
Trang 18Hình ảnh 11: mảng đã sắp xếp, cập nhật k, cập nhật left, right và thoát vòng lặp
- Như vậy, mảng sau khi được sắp xếp là 1, 3, 5, 8, 9
11
Trang 192.5 Độ phức tạp của thuật toán Shaker Sort
2.5.1 Độ phức tạp:
- Trường hợp tốt nhất: O(n)
- Trường hợp xấu nhất: O(n2)
- Trường hợp trung bình: O(n2)
- Thuật toán có thể hoạt động hiệu quả trên mảng gần như được sắp xếp
- Thuật toán này hoạt động rất hiệu quả khi sắp xếp các mảng có kích thước nhỏ
và vừa
2.6.2 Nhược điểm
- Thời gian chạy trung bình của thuật toán Shaker Sort là O(n ) Việc này đồng2
nghĩa với việc đây là một thuật toán hoạt động kém hiệu quả khi kích thước của mảngtăng lên
- Trên các mảng có kích thước lớn, Shaker Sort hoạt động không hiệu quả vìmất nhiều thời gian hơn để hoàn thành việc sắp xếp
12
Trang 20KẾT LUẬN
Shaker Sort là một thuật toán sắp xếp dễ học dễ hiểu và hoạt động khá hiệu quả.Tuy không có ưu thế về tốc độ hay tính hiệu quả so với các thuật toán khác ở thờiđiểm hiện tại nhưng việc dễ học dễ có thể dùng làm kiến thức nền tảng cho sinh viênkhi học môn Cấu trúc dữ liệu và giải thuật
Cấu trúc dữ liệu và giải thuật là một trong những môn học cần thiết và luônđược phát triển mạnh mẽ để phục vụ cho nhiều lĩnh vực hoạt động của con người Đặcbiệt là trong lĩnh vực công nghệ thông tin, khi mà đa số các ngành đang được Nhànước đẩy mạnh số hoá nhằm giúp cho các hoạt động quản lý hay các hoạt động kháccủa con người trở nên dễ dàng, rộng mở và an toàn hơn bao giờ hết
13
Trang 21TÀI LIỆU THAM KHẢO
Agrawal, R., 2023 geeksforgeeks.org [Online]Available at: https://www.geeksforgeeks.org/cocktail-sort/
Hoare, C., 1962 Quicksort Communications of the ACM
Quoc_Khanh_Tran, 2022 daynhauhoc.com [Online]Available at: https://daynhauhoc.com/t/cau-truc-du-lieu-va-giai-thuat-giai-thuat-sap-xep-rung-lac-shaker-sort/126359
14