Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 114 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
114
Dung lượng
395,97 KB
Nội dung
Chương 2.2 Giải thuật xếp Trần Minh Thái Email: minhthai@itc.edu.vn Website: www.minhthai.edu.vn Mục tiêu Nắm vững, minh họa tính tốn phép gán (hốn vị) giải thuật xếp mảng chiều Cài đặt giải thuật ngôn ngữ C/C++ Các khái niệm Sắp xếp trình xử lý danh sách phần tử (hoặc mẫu tin) để đặt chúng theo thứ tự thỏa mãn tiêu chuẩn dựa nội dung thông tin lưu giữ phần tử Khái niệm nghịch a1 a2 a3 a4 … … aN-2 aN-1 aN Giả sử xét mảng có thứ tự tăng dần, có iaj ta gọi nghịch Mục tiêu xếp khử nghịch (bằng cách hoán vị) Các giải thuật xếp Đổi chổ trực tiếp – Interchange Sort Chọn trực tiếp – Selection Sort Chèn trực tiếp – Insertion Sort Nổi bọt – Bubble Sort Quick Sort Một số giải thuật khác đọc thêm tài liệu Đổi chổ trực tiếp – interchange sort Ý tưởng Ý tưởng giải thuật xuất phát từ đầu dãy, tìm tất nghịch chứa phần tử này, triệt tiêu chúng cách đổi chỗ phần tử với phần tử tương ứng cặp nghịch Lặp lại xử lý với phần tử dãy Đổi chổ trực tiếp – interchange sort Giả sử cần xếp dãy số sau tăng dần 10 10 55 77 33 99 15 15 22 11 Đổi chổ trực tiếp – interchange sort Bước 1: Xét phần tử (tại vị trí 1) 10 10 55 77 i j 33 99 15 15 22 11 Đổi chổ trực tiếp – interchange sort Bước 1: Xét phần tử (tại vị trí 1) 10 10 55 i j 33 99 15 15 22 11 8 Đổi chổ trực tiếp – interchange sort Bước 1: Xét phần tử (tại vị trí 1) 10 10 55 i j 33 99 15 15 22 11 Đổi chổ trực tiếp – interchange sort Bước 1: Xét phần tử (tại vị trí 1) 33 i 10 10 7 55 j 99 15 15 22 11 10 “Chèn trực tiếp” “Chọn trực tiếp” có chi phí cho trường hợp xấu O(n2) đó, khơng thích hợp cho việc xếp mảng lớn Dễ cài đặt, dễ kiểm lỗi “Chèn trực tiếp” tốt “Chọn trực tiếp”, mảng có thứ tự sẵn Cần có giải thuật hiệu cho việc xếp mảng lớn 100 Quick sort Chia dãy cần thành phần Cách “chia”: ½ dãy bên trái chứa giá trị nhỏ ½ dãy bên phải Thực việc xếp dãy (đệ qui) x (x phần tử dãy) 101 i=1, j=8 L R x 10 15 1 i j L=1 R=8 Đoạn Đoạn cần xếp L=1 R=3 Đoạn L=4 R=8 102 i=4, j=8 L R x 15 10 i L=4 R=8 L=1 R=3 Đoạn cần xếp j Đoạn Đoạn L=4 R=5 L=5 R=8 103 i=5, j=8 L=5 R=8 L=4 R=5 L=1 R=4 Đoạn cần xếp L x R 15 10 i j Đoạn L=6 R=8 104 i=6, j=8 L=6 R=8 L=4 R=5 L=1 R=4 Đoạn cần xếp L x R 15 10 i j Đoạn L=6 R=7 105 i=6, j=7 L=6 R=7 L=4 R=5 L=1 R=4 Đoạn cần xếp x L R 10 15 i j 106 i=4, j=5 x L R 10 15 i j L=4 R=5 L=1 R=4 Đoạn cần xếp 107 i=1, j=4 L x 10 15 R i L=1 R=4 Đoạn cần xếp j Đoạn L=3 R=4 108 i=3, j=4 x L R 10 15 i j L=3 R=4 Đoạn cần xếp 109 10 15 Khơng đoạn cần xếp! Kết thúc Đoạn cần xếp 110 Giải thuật Cho dãy aL, aL+1, … aR Bước 1: Phân hoạch dãy aL … aR thành dãy con: Dãy 1: aL … aj < x Dãy 2: aj+1 … ai-1 =x Dãy 3: … aR > x Bước 2: Nếu (L