1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Sắp xếp (Phần 1)

9 7 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 106,43 KB

Nội dung

Bài giảng Sắp xếp (Phần 1) nêu lên bài toán sắp xếp, sắp xếp nổi bọt, sắp xếp hòa nhập (Merge sort). Mời các bạn tham khảo bài giảng để bổ sung thêm kiến thức về lĩnh vực này. Với các bạn chuyên ngành Công nghệ thông tin thì đây là tài liệu hữu ích.

Sắp xếp (sorting) Lê Sỹ Vinh Bộ môn Khoa Học Máy Tính – Khoa CNTT Đại Học Cơng Nghệ - ĐHQGHN Email: vinhioi@yahoo.com Bài toán xếp Input: Danh sách đối tượng A = (a0,…,an) Problem: Đổi chỗ phần tử để thu danh sách mới, phần tử xếp theo thứ tự Output: A’ = (a’0,…,a’n) | a’i < a’i+1, i = 0…n - Ví dụ: A = (1 , 5, 0, 3) → (0, 1, 3, 5) A = (‘Vinh’, ‘Tuan’, ‘Anh’) → (‘Anh’, ‘Vinh’, ‘Tuan) Sắp xếp bọt Thuật toán: Lần lượt duyệt qua danh sách, hai phần tử liền kề đứng không thứ tự đổi chỗ Lặp lại trình danh sách xếp Ví dụ: Sắp tăng dần dãy số A = (9, 7, 6, 2) (9, 7, 6, 2) → (9, 7, 2, 6) → (9, 2, 7, 6) → (2, 9, 7, 6) (2, 9, 7, 6) → (2, 9, 6, 7) → (2, 6, 9, 7) (2, 6, 9, 7) → (2, 6, 7, 9) Ví dụ 2, 3, 5: Chương trình Độ phức tạp: O(n2) Sắp xếp hòa nhập (Merge sort) Chia để trị (Divide and conquer): Chia toán lớn thành toán nhỏ Giải tốn nhỏ sau gộp lại để lời giải cho toán lớn Ý tưởng merge sort: Để xếp mảng A[start…end], ta chia mảng A thành mảng A1 A2 Sắp xếp A1 A2, sau hịa nhập chúng thành để mang A xếp Mơ tả thuật tốn: Bước 1: – Mid = (start + end) / – Sắp xếp hai nửa mảng A[start…mid] A[(mid + 1)…end] Việc xếp hai nửa mảng thực cách gọi đệ quy thủ tục xếp hòa nhập Bước 2: Hòa nhập hai nửa mảng A[start…mid] A[(mid + 1)…end] để thu mảng A phần tử xếp Ví dụ: A = (7, 3, 9, 1) Sắp xếp hai nửa mảng: A = (3, 7, 1, 9) Hòa nhập hai nửa mảng: A = (1, 3, 7, 9) Image taken from Skiena’s lecture note at Stony brook Ví dụ • 43 • C D A B G H I J K AB F E Sắp xếp hòa nhập (Merge sort) void MergeSort( Item A[ ], int start, int end) { if (start < end) { int mid = (start + end)/2; MergeSort ( A, start, mid ); MergeSort ( A, mid+1, end); Merge ( A, start, mid, end); } } Hòa nhập hai mảng tăng dần ↓ ↓ ↓ 7 3 7 ↓ ↓ ↓ ↓ ↓ 9 Sắp xếp hịa nhập Thuật tốn merge: Xem chương trình Độ phức tạp thuật tốn xếp hòa nhập: O(n logn) ... thành mảng A1 A2 Sắp xếp A1 A2, sau hịa nhập chúng thành để mang A xếp Mơ tả thuật tốn: Bước 1: – Mid = (start + end) / – Sắp xếp hai nửa mảng A[start…mid] A[(mid + 1)? ??end] Việc xếp hai nửa mảng... mảng thực cách gọi đệ quy thủ tục xếp hòa nhập Bước 2: Hòa nhập hai nửa mảng A[start…mid] A[(mid + 1)? ??end] để thu mảng A phần tử xếp Ví dụ: A = (7, 3, 9, 1) Sắp xếp hai nửa mảng: A = (3, 7, 1,... ‘Anh’) → (‘Anh’, ‘Vinh’, ‘Tuan) Sắp xếp bọt Thuật toán: Lần lượt duyệt qua danh sách, hai phần tử liền kề đứng khơng thứ tự đổi chỗ Lặp lại trình danh sách xếp Ví dụ: Sắp tăng dần dãy số A = (9,

Ngày đăng: 21/05/2021, 14:09

w