Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 5 - Nguyễn Khánh Phương
lượt xem 22
download
Chương 5 - Sắp xếp. Trong chương này, người học có thể hiểu được một số kiến thức cơ bản về: Sắp xếp chèn (insertion sort), sắp xếp chọn (selection sort), sắp xếp nổi bọt (bubble sort), sắp xếp trộn (merge sort), sắp xếp nhanh (quick sort), sắp xếp vun đống (heap sort).
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 5 - Nguyễn Khánh Phương
- TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG om .c ng co Cấu trúc dữ liệu và giải thuật an th o ng Nguyễn Khánh Phương du u Computer Science department cu School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Nội dung khóa học Chương 1. Các khái niệm cơ bản om Chương 2. Các sơ đồ thuật toán .c ng Chương 3. Các cấu trúc dữ liệu cơ bản co Chương 4. Cây an Chương 5. Sắp xếp th o ng du Chương 6. Tìm kiếm u cu Chương 7. Đồ thị 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG om .c ng co Chương 5. Sắp xếp an th o ng Nguyễn Khánh Phương du u Computer Science department cu School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Bài toán sắp xếp • Sắp xếp (Sorting) là quá trình tổ chức lại họ các dữ liệu theo thứ tự giảm dần hoặc tăng dần. om • Dữ liệu cần sắp xếp có thể là: .c – Số nguyên/thực.. (integers/float) ng – Xâu kí tự (character strings) co – … • Khóa sắp xếp (sort key) an th – Là bộ phận của bản ghi xác định thứ tự sắp xếp của bản ghi trong họ các bản ghi. o ng – Ta cần sắp xếp các bản ghi theo thứ tự của các khoá. du – Ví dụ: khóa là tong = toan + ly + hoa u typedef struct{ cu char *ma; struct{ float toan, ly, hoa, tong; } DT; }thisinh; typedef struct node{ thisinh data; struct node* next; 4 }node; CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Các loại thuật toán sắp xếp Sắp xếp trong (internal sort): • Đòi hỏi họ dữ liệu được đưa toàn bộ vào bộ nhớ trong của máy tính om • Ví dụ: .c – insertion sort (sắp xếp chèn), selection sort (sắp xếp lựa chọn), bubble sort (sắp xếp nổi bọt) ng – quick sort (sắp xếp nhanh), merge sort (sắp xếp trộn), heap sort (sắp xếp vun đống), sample co sort (sắp xếp dựa mẫu), shell sort (vỏ sò) an Sắp xếp ngoài (external sort): th • Họ dữ liệu không thể cùng lúc đưa toàn bộ vào bộ nhớ trong, nhưng có thể đọc vào từng bộ phận từ ng bộ nhớ ngoài o • Ví dụ:Poly-phase mergesort (trộn nhiều đoạn), cascade-merge (thác nước), oscillating sort (dao du động) u cu Sắp xếp song song (Parallel sort): • Bitonic sort, Batcher even-odd sort. • Smooth sort, cube sort, column sort. • GPU sort. NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Các đặc trưng của một thuật toán sắp xếp • Tại chỗ (in place): nếu không gian nhớ phụ mà thuật toán đòi hỏi là O(1), nghĩa là bị chặn bởi hằng số không phụ thuộc vào độ dài của dãy cần sắp xếp. om • Ổn định (stable): Nếu các phần tử có cùng giá trị vẫn giữ nguyên thứ tự tương đối .c của chúng như trước khi sắp xếp. ng co an Trước sắp xếp 10 20 20 30 10 th ng Sắp xếp này ổn định vì thứ tự của các quả bóng có giá trị bằng nhau là không thay đổi trước và sau khi sắp xếp: o • Quả bóng màu xanh với giá trị 10 đứng trước quả bóng màu du cam giá trị 10. • Tương tự với 2 quả bóng xanh và cam cùng giá trị 20 u cu Sau sắp xếp 10 10 20 20 30 NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Bài toán sắp xếp • Có hai phép toán cơ bản mà thuật toán sắp xếp thường phải sử dụng: – Đổi chỗ (Swap): Thời gian thực hiện là O(1) om void swap( datatype *a, datatype *b){ .c datatype *temp = *a; //datatype-kiểu dữ liệu của phần tử *a = *b; ng *b = *temp; co } an th – So sánh: Compare(a, b) trả lại true nếu a đi trước b trong thứ tự cần sắp xếp và ng false nếu trái lại. o • Phân tích thuật toán sắp xếp: thông thường, các thuật toán sẽ sử dụng phép toán du so sánh để xác định thứ tự giữa hai phần tử rồi thực hiện đổi chỗ nếu cần. u Khi phân tích thuật toán sắp xếp, ta sẽ chỉ cần đếm số phép toán so sánh và số lần cu dịch chuyển các phần tử (bỏ qua các phép toán khác không ảnh hưởng đến kết quả). NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Bài toán sắp xếp • Các thuật toán chỉ sử dụng phép toán so sánh để xác định thứ tự giữa hai phần tử được gọi là thuật toán sử dụng phép so sánh (Comparison-based sorting algorithm). om • Nếu có những thông tin bổ sung về dữ liệu đầu vào, ví dụ như: – Các số nguyên nằm trong khoảng [0..k] trong đó k = O(n) .c – Các số thực phân bố đều trong khoảng [0, 1) ng ta sẽ có thuật toán tốt hơn thuật toán sắp xếp chỉ dựa vào phép so sánh. co (Thuật toán thời gian tuyến tính: sắp xếp đếm (couting-sort), sắp xếp theo cơ số (radix- an sort), sắp xếp đóng gói (bucket-sort)) th o ng du u cu NGUYỄN KHÁNH PHƯƠNG 8 Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Các thuật toán sắp xếp Khi so sánh các thuật toán, thông thường quan tâm đến: • Thời gian chạy. Đối với các dữ liệu rất lớn, các thuật toán không hiệu quả om sẽ chạy rất chậm và không thể ứng dụng trong thực tế. .c • Bộ nhớ. Các thuật toán nhanh đòi hỏi đệ quy sẽ có thể phải tạo ra các bản ng copy của dữ liệu đang xử lí. Với những hệ thống mà bộ nhớ có giới hạn (ví dụ embedded system), một vài thuật toán sẽ không thể chạy được. co • Độ ổn định (stability). Độ ổn định được định nghĩa dựa trên điều gì sẽ xảy an ra với các phần tử có giá trị giống nhau. th – Đối với thuật toán sắp xếp ổn định, các phần tử với giá trị bằng nhau sẽ ng giữ nguyên thứ tự trong mảng trước và sau khi sắp xếp. o du – Đối với thuật toán sắp xếp không ổn định, các phần tử có giá trị bằng u nhau sẽ có thể có thứ tự bất kỳ. cu NGUYỄN KHÁNH PHƯƠNG 9 Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tiêu chí lựa chọn giải thuật Nhiều yếu tố ảnh hưởng: • Ổn định om • Danh sách liên kết hay mảng .c • Đặc trưng của dữ liệu cần sắp xếp: ng – Nhiều khóa ? co – Các khóa là phân biệt ? – an Nhiều dạng khóa ? – Kích thước bản ghi lớn hay nhỏ ? – Dữ liệu được sắp xếp ngẫu nhiên? th o ng du Không thể bao phủ tất cả các yếu tố u cu NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Nội dung 1. Sắp xếp chèn (Insertion sort) om 2. Sắp xếp chọn (Selection sort) .c 3. Sắp xếp nổi bọt (Bubble sort) ng co 4. Sắp xếp trộn (Merge sort) an 5. Sắp xếp nhanh (Quick sort) th ng 6. Sắp xếp vun đống (Heap sort) o du u cu 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Sắp xếp chèn (Insertion sort) om .c Phỏng theo cách làm của người chơi bài khi cần "chèn" thêm một con bài ng vào bộ bài đã được sắp xếp trên tay. co an Để chèn 12, ta cần tạo chỗ cho nó bởi th việc dịch chuyển đầu tiên là 36 và sau đó là 24. o ng du u cu NGUYỄN KHÁNH PHƯƠNG 12 Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Sắp xếp chèn (Insertion sort) om .c Phỏng theo cách làm của người chơi bài khi cần "chèn" thêm một ng con bài vào bộ bài đã được sắp co xếp trên tay. an th Để chèn 12, ta cần tạo chỗ cho nó ng bởi việc dịch chuyển đầu tiên là 36 o và sau đó là 24. du u cu NGUYỄN KHÁNH PHƯƠNG 13 Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Sắp xếp chèn (Insertion sort) om .c Phỏng theo cách làm của người chơi bài khi cần "chèn" thêm một ng con bài vào bộ bài đã được sắp co xếp trên tay. an th Để chèn 12, ta cần tạo chỗ cho nó ng bởi việc dịch chuyển đầu tiên là 36 o và sau đó là 24. du u cu NGUYỄN KHÁNH PHƯƠNG 14 Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Sắp xếp chèn (Insertion sort) om .c Phỏng theo cách làm của người chơi bài khi cần "chèn" thêm một ng con bài vào bộ bài đã được sắp co xếp trên tay. an th Để chèn 12, ta cần tạo chỗ cho nó ng bởi việc dịch chuyển đầu tiên là 36 o và sau đó là 24. du u cu NGUYỄN KHÁNH PHƯƠNG 15 Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Sắp xếp chèn (Insertion sort) Thuật toán: • Mảng cần sắp xếp được chia làm 2 phần, sorted và unsorted: om – Những phần tử nằm trong phần sorted: đã được sắp xếp – Những phần tử nằm trong phần unsorted: chưa được sắp xếp .c • Mỗi bước lặp: phần tử đầu tiên thuộc phần unsorted sẽ được chuyển sang phần ng sorted. co Mảng có n phần tử sẽ cần n-1 bước lặp để sắp xếp xong an th o ng du u cu 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Sắp xếp chèn (Insertion sort) • Thuật toán: – Tại bước k =1, 2, ..., n: om đưa phần tử thứ k trong mảng đã cho vào đúng vị trí trong dãy gồm k phần .c tử đầu tiên. ng Tại mỗi bước lặp k, có thể cần nhiều hơn một lần hoán đổi vị trí các phần tử để có thể đưa phần tử thứ co k về đúng vị trí của nó trong dãy cần sắp xếp an Bước lặp k: liên tục đổi chỗ phần tử thứ k với phần tử kề bên trái nó (phần tử ngay th trước) chừng nào phần tử thứ k còn nhỏ hơn phần tử đó ng o du u cu Tính chất: Sau bước lặp k, k phần tử đầu tiên a[1], a[2], …, a[k] đã được sắp thứ tự. 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Cài đặt: Insertion Sort Algorithm k=5: tìm vị trí đúng cho a[5]=14 void insertionSort(int a[], int size); a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 13 17 20 28 42 14 23 15 om temp = 14 13 17 20 28 42 42 23 15 .c 13 17 20 28 28 42 23 15 ng 13 17 20 20 28 42 23 15 co 13 17 17 20 28 42 23 15 an th o ng du for (int k = 1; k < size; k++) { int temp = a[k]; u int pos = k; cu /* bước lặp k: liên tục đổi chỗ phần tử thứ k với phần tử kề bên trái nó chừng nào phần tử thứ k còn nhỏ hơn phần tử đó */ while (pos > 0 && a[pos-1] > temp) { a[pos] = a[pos–1]; pos--; } // end while NGUYỄN KHÁNH PHƯƠNG } Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Cài đặt: Insertion Sort Algorithm k=5: tìm vị trí đúng cho a[5]=14 void insertionSort(int a[], int size); a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 13 17 20 28 42 14 23 15 om temp = 14 13 17 20 28 42 42 23 15 .c 13 17 20 28 28 42 23 15 ng 13 17 20 20 28 42 23 15 co 13 17 17 20 28 42 23 15 an th 13 14 17 20 28 42 23 15 o ng du for (int k = 1; k < size; k++) { int temp = a[k]; u int pos = k; cu /* bước lặp k: liên tục đổi chỗ phần tử thứ k với phần tử kề bên trái nó chừng nào phần tử thứ k còn nhỏ hơn phần tử đó */ while (pos > 0 && a[pos-1] > temp) { a[pos] = a[pos–1]; pos--; } // end while // Chèn giá trị temp (=a[k]) vào đúng vị trí a[pos] = temp; NGUYỄN KHÁNH PHƯƠNG } Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Cài đặt: Insertion Sort Algorithm om .c ng co an th o ng du u cu NGUYỄN KHÁNH PHƯƠNG 20 Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt
CÓ THỂ BẠN MUỐN DOWNLOAD
-
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 | 175 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
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 | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
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 đỏ đen - Bùi Tiến Lên
25 p | 81 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 58 | 7
-
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: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 159 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
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 (2017)
67 p | 106 | 4
-
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 - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
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 AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 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 | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
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