Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 110 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
110
Dung lượng
8,27 MB
Nội dung
Chương 2.2 Giải thuật xếp * * Nắm vững, minh họa tính toán phép gán (hoán vị) giải thuật xếp mảng chiều Cài đặt giải thuật ngôn ngữ C/C++ * 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ị) *Đổi chổ trực tiếp – Interchange Sort *Chọn trực tiếp – Selection Sort *Chèn trực tiếp – Insertion Sort *Quick Sort *Nổi bọt – Buble Sort *Một số giải thuật khác đọc thêm tài liệu *Ý 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 Giả sử cần xếp dãy số sau tăng dần Bước 1: Xét phần tử (tại vị trí 1) i j Bước 1: Xét phần tử (tại vị trí 1) i j 8 Bước 1: Xét phần tử (tại vị trí 1) i j Bước 1: Xét phần tử (tại vị trí 1) i j 10 Đánh giá giải thuật *Trong trường hợp, số phép so sánh là: (n-1) + (n-2) + … + = n(n-1)/2 = O(n2) *Số phép hoán vị: *Trường hợp xấu nhất: n(n-1)/2 *Trường hợp tốt nhất: 96 *“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 97 *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) 98 i=1, j=8 x L R 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 99 i=4, j=8 x L R 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 100 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 101 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 102 x i=6, j=7 L=6 R=7 L=4 R=5 L=1 R=4 Đoạn cần xếp L R 10 15 i j 103 x i=4, j=5 L R 10 15 i j L=4 R=5 L=1 R=4 Đoạn cần xếp 104 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 105 10 15 Không đoạn cần xếp! Kết thúc Đoạn cần xếp 106 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[...]... hai (tại vị trí 2) 1 2 i 3 4 j 5 6 7 8 17 Bước 2: Xét phần tử thứ hai (tại vị trí 2) 1 2 i 3 4 5 j 6 7 8 18 Bước 2: Xét phần tử thứ hai (tại vị trí 2) 1 2 i 3 4 5 6 j 7 8 19 Bước 2: Xét phần tử thứ hai (tại vị trí 2) 1 2 i 3 4 5 6 7 j 8 20 Bước 2: Xét phần tử thứ hai (tại vị trí 2) Kết thúc bước 2 1 2 i 3 4 5 6 7 8 j 21 Bước 3: Xét phần tử thứ ba (tại vị trí 3) 1 2 i 3 4 j 5 6 7 8 22 Bước 3: Xét phần... vị trí 1) 1 i 2 3 4 5 j 6 7 8 11 Bước 1: Xét phần tử đầu tiên (tại vị trí 1) 1 i 2 3 4 5 6 j 7 8 12 Bước 1: Xét phần tử đầu tiên (tại vị trí 1) 1 i 2 3 4 5 6 7 j 8 13 Bước 1: Xét phần tử đầu tiên (tại vị trí 1) Kết thúc bước 1 1 i 2 3 4 5 6 7 8 j 14 Bước 2: Xét phần tử thứ hai (tại vị trí 2) 1 i 2 3 j 4 5 6 7 8 15 Bước 2: Xét phần tử thứ hai (tại vị trí 2) 1 2 i 3 j 4 5 6 7 8 16 Bước 2: Xét phần tử... thứ ba (tại vị trí 3) 1 2 3 i 4 j 5 6 7 8 23 Bước 3: Xét phần tử thứ ba (tại vị trí 3) 1 2 3 i 4 5 j 6 7 8 24 Bước 3: Xét phần tử thứ ba (tại vị trí 3) 1 2 3 i 4 5 6 j 7 8 25 Bước 3: Xét phần tử thứ ba (tại vị trí 3) 1 2 3 i 4 5 6 7 j 8 26 Bước 3: Xét phần tử thứ ba (tại vị trí 3) Kết thúc bước 3 1 2 3 i 4 5 6 7 8 j 27 Bước 4: Xét phần tử thứ tư (tại vị trí 4) 1 2 3 i 4 5 j 6 7 8 28 Bước 4: Xét phần tử... phần tử thứ tư (tại vị trí 4) 1 2 3 4 i 5 j 6 7 8 29 Bước 4: Xét phần tử thứ tư (tại vị trí 4) 1 2 3 4 i 5 6 j 7 8 30 Bước 4: Xét phần tử thứ tư (tại vị trí 4) 1 2 3 4 i 5 6 7 j 8 31 Bước 4: Xét phần tử thứ tư (tại vị trí 4) Kết thúc bước 4 1 2 3 4 i 5 6 7 8 j 32 Bước 5: Xét phần tử thứ năm (tại vị trí 5) 1 2 3 4 i 5 6 j 7 8 33 Bước 5: Xét phần tử thứ năm (tại vị trí 5) 1 2 3 4 5 i 6 j 7 8 34 Bước 5:... tử thứ năm (tại vị trí 5) 1 2 3 4 i 5 6 j 7 8 33 Bước 5: Xét phần tử thứ năm (tại vị trí 5) 1 2 3 4 5 i 6 j 7 8 34 Bước 5: Xét phần tử thứ năm (tại vị trí 5) 1 2 3 4 5 i 6 7 j 8 35 Bước 5: Xét phần tử thứ năm (tại vị trí 5) Kết thúc bước 5 1 2 3 4 5 i 6 7 8 j 36 ... (tại vị trí 2) i j 20 Bước 2: Xét phần tử thứ hai (tại vị trí 2) Kết thúc bước 2 i j 21 Bước 3: Xét phần tử thứ ba (tại vị trí 3) i j 22 Bước 3: Xét phần tử thứ ba (tại vị trí 3) i j 23 Bước 3:... hai (tại vị trí 2) i j 16 Bước 2: Xét phần tử thứ hai (tại vị trí 2) i j 17 Bước 2: Xét phần tử thứ hai (tại vị trí 2) i j 18 Bước 2: Xét phần tử thứ hai (tại vị trí 2) i j 19 Bước 2: Xét phần tử...* * Nắm vững, minh họa tính toán phép gán (hoán vị) giải thuật xếp mảng chiều Cài đặt giải thuật ngôn ngữ C/C++ * Sắp xếp trình xử lý danh sách phần tử * (hoặc mẫu tin) để đặt chúng