Cấu trúc dữ liệu và giải thuật (Đỗ Tuấn Anh) - Chương 7. Sắp xếp
lượt xem 25
download
Cấu trúc dữ liệu và giải thuật là một trong những môn học cơ bản của sinh viên ngành công nghệ thông tin. Cấu trúc dữ liệu và giải thuật được xem là 2 yếu tố quan trọng nhất của lập trình . Chương trình= Cấu trức dữ liệu+Giải thuật.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Cấu trúc dữ liệu và giải thuật (Đỗ Tuấn Anh) - Chương 7. Sắp xếp
- Cấu trúc dữ liệu và giải thuật Đỗ Tuấn Anh anhdt@it-hut.edu.vn
- Nội dung Chương 1 – Thiết kế và phân tích (5 tiết) Chương 2 – Giải thuật đệ quy (10 tiết) Chương 3 – Mảng và danh sách (5 tiết) Chương 4 – Ngăn xếp và hàng đợi (10 tiết) Chương 5 – Cấu trúc cây (10 tiết) Chương 8 – Tìm kiếm (5 tiết) Chương 7 – Sắp xếp (10 tiết) Chương 6 – Đồ thị (5 tiết) Chương 9 – Sắp xếp và tìm kiếm ngoài (after)
- Chương 7 – Sắp xếp 1. Đặt vấn đề 2. Ba phương pháp sắp xếp cơ bản • Sắp xếp lựa chọn – Selection Sort • Sắp xếp thêm dần – Insertion Sort • Sắp xếp nổi bọt/đổi chỗ - Bubble Sort 3. Sắp xếp hòa nhập – Merge Sort 4. Sắp xếp nhanh/phân đoạn – Quick Sort 5. Sắp xếp vun đống – Heap Sort
- 1. Đặt vấn đề Sắp xếp là các thuật toán bố trí lại các phần tử của một mảng A[n] theo một thứ tự nhất định. Việc sắp xếp được tiến hành dựa trên khóa của phần tử. Ví dụ: danh mục điện thoại gồm: Tên cơ quan, địa chỉ, số điện thoại. Đơn giản bài toán: -Khóa là các giá trị số -Phần tử chỉ có trường khóa, không có các thành phần khác -Sắp xếp theo thứ tự tăng dần
- 2. Ba phương pháp sắp xếp cơ bản Sắp xếp lựa chọn – Selection Sort Sắp xếp thêm dần – Insertion Sort Sắp xếp nổi bọt/đổi chỗ - Bubble Sort
- Sắp xếp lựa chọn (Selection Sort) Là phương pháp đơn giản nhất Sắp xếp lựa chọn: Tìm phần tử có giá trị nhỏ nhất và đổi chỗ với phần tử chỉ số 0 (phần tử đầu của mảng). Tìm phần tử có giá trị nhỏ nhất trong số các phần tử chỉ số 1 đến chỉ số n-1 và đổi chỗ với phần tử chỉ số 1. Tìm phần tử có giá trị nhỏ nhất trong số các phần tử chỉ số 2 đến chỉ số n-1 và đổi chỗ với phần tử chỉ số 2. …
- Selection Sort: Lượt 1 Array [ 0 ] 36 U N [1] 24 S O [2] 10 R T [3] 6 E [4] D 12 7
- Selection Sort: Kết thúc lượt 1 Array [ 0 ] 6 SORTED [1] U 24 N S [2] 10 O R [3] 36 T E [4] 12 D 8
- Selection Sort: Lượt 2 Array [ 0 ] 6 SORTED [1] U 24 N S [2] 10 O R [3] 36 T E [4] 12 D 9
- Selection Sort: Kết thúc lượt 2 Array [ 0 ] 6 SORTED [1] 10 [2] U 24 N S [3] O 36 R T [4] 12 E D 10
- Selection Sort: Lượt 3 Array [ 0 ] 6 SORTED [1] 10 [2] U 24 N S [3] O 36 R T [4] 12 E D 11
- Selection Sort: Kết thúc lượt 3 Array [ 0 ] S 6 O [1] R 10 T E [2] 12 D [3] 36 UNSORTED [4] 24 12
- Selection Sort: Lượt 4 Array [ 0 ] S 6 O [1] R 10 T E [2] 12 D [3] 36 UNSORTED [4] 24 13
- Selection Sort: Kết thúc lượt 4 Array [ 0 ] 6 S [1] O 10 R [2] 12 T E [3] 24 D [4] 36 14
- Selection Sort: Số phép so sánh? Array [ 0 ] 6 4 so sánh cho phần tử [0] [1] 10 3 so sánh cho phần tử [1] [2] 12 2 so sánh cho phần tử [2] [3] 1 so sánh cho phần tử [3] 24 [4] =4+3+2+1 36 15
- Độ phức tạp về thời gian Số phép so sánh khi mảng có N phần tử: Sum = (N-1) + (N-2) + . . . + 2 + 1 N −1 Sum = ∑ i = ( N −1) N O(N2) 2 i =1 16
- Ví dụ: Sắp xếp lựa chọn 13 4 7 8 3 9 16 3 4 7 8 13 9 16 3 4 7 8 9 13 16 Sắp xếp lựa chọn là thuật toán sắp xếp ngay tại chỗ : không cần sử dụng thêm bộ nhớ. O(n2 ) Xấu nhất: O(n2 ) Tốt nhất: O(n2 ) Trung bình:
- Sắp xếp lựa chọn void SelectionSort ( int A [ ] , int n ) // Sắp xếp mảng A[0 . . n-1 ] theo thứ tự tăng dần { for ( int current = 0 ; current < n - 1 ; current++ ) Swap ( A [ current ] , A [ GetMin ( A, current, n-1 ) ] ) ; } 18
- int GetMin ( int A [ ] , int start , int end ) // Tìm chỉ số của phần tử có giá trị nhỏ nhất trong mảng // A [start] . . A [end]. { int indexOfMin = start ; for ( int i = start + 1 ; i
- Sắp xếp thêm dần Insertion Sort Sắp xếp các quân bài? Mỗi lần “chèn” thêm một quân bài vào tay cầm bài, 6 10 24 36 các quân bài trên tay đã được sắp xếp. Để chèn 12, cần phải tạo 12 khoảng trống cho nó bằng cách dịch chuyển 36 trước và sau đó dịch chuyển 24. 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Thị Kim Chi
180 p | 145 | 19
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 179 | 17
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 81 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Các khái niệm cơ bản về Cấu trúc dữ liệu và giải thuật
20 p | 47 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 173 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu mảng với danh sách liên kết - Bùi Tiến Lên
36 p | 41 | 5
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Tổng quan - Nguyễn Đức Cương
6 p | 100 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 1: Giới thiệu chung
40 p | 56 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Chương 1: Tổng quan về giải thuật và cấu trúc dữ liệu
10 p | 70 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 7 - Châu Thị Bảo Hà
133 p | 115 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Th.S Thiều Quang Trung
44 p | 93 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 107 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Một số khái niệm cơ bản về cấu trúc dữ liệu và giải thuật
12 p | 92 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Ths. Phạm Thanh An (2018)
67 p | 65 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Ngô Quang Thạch
49 p | 64 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 70 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn