Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4 - Bùi Tiến Lên
lượt xem 5
download
Bài giảng "Cấu trúc dữ liệu và giải thuật - Chương 4: Các thuật toán sắp xếp" cung cấp cho người đọc các kiến thức: Bài toán sắp xếp, các phương pháp sắp xếp, selection sort, insertion sort,.... Mời các bạn cùng tham khảo nội dung chi tiết.
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à giải thuật: Chương 4 - Bùi Tiến Lên
- CÁC THUẬT TOÁN SẮP XẾP Bùi Tiến Lên 01/01/2017 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Bài toán sắp xếp I Sắp xếp một danh sách các đối tượng theo một thứ tự nào đó là một trong những công việc phổ biến I Sắp xếp là một yêu cầu không thể thiếu trong việc viết phần mềm ứng dụng I Do đó, nghiên cứu các phương pháp sắp xếp là cần thiết cho những ai học lập trình Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 2
- Bài toán sắp xếp (cont.) Định nghĩa 1 Cho một dãy a có n phần tử có thứ tự. Hãy sắp xếp dãy {a0 , a1 , ..., an−1 } theo thứ tự tăng dần. Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 3
- Các phương pháp sắp xếp Có rất nhiều phương pháp sắp xếp khác nhau. Mỗi phương pháp có những đặc điểm riêng I Phương pháp Selection Sort I Phương pháp Insertion Sort I Phương pháp Bubble Sort I Phương pháp Shell Sort I Phương pháp Heap Sort I Phương pháp Merge Sort I Phương pháp Quick Sort I Phương pháp Radix Sort I Phương pháp Counting Sort Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 4
- SELECION SORT CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Selection Sort Ý tưởng của thuật toán như sau: Giả sử dãy a được chia làm hai phần: phần trên trái đã sắp xếp s và phần bên phải chưa sắp xếp u 1. s = ∅ và u = a 2. Tìm phần tử nhỏ nhất xm của u 3. Loại xm ra khỏi u thêm vào cuối của s 4. Nếu u vẫn còn phần tử thì quay lại bước 2 Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 6
- Selection Sort (cont.) 1 void SelectionSort (int a[], int n) 2 { 3 int min; 4 for (int i = 0; i < n; i++) 5 { 6 min = i; 7 for (int j = i + 1; j < n; j++) 8 if (a[j] < a[min ]) 9 min = j; 10 if (a[min] < a[i]) 11 Swap(a[min], a[i]); 12 } 13 } Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 7
- Đánh giá Phân tích chi phí thực hiện theo n (số lượng phần tử của mảng) Trường hợp O(g(n)) tốt nhất ? trung bình ? xấu nhất ? Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 8
- INSERTION SORT CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Insertion Sort Ý tưởng của thuật toán như sau: Giả sử dãy a được chia làm hai phần: phần trên trái đã sắp xếp s và phần bên phải chưa sắp xếp u 1. s = ∅ và u = a 2. Lấy phần tử đầu tiên x của u 3. Loại x ra khỏi u 4. Chèn x vào s sao cho đúng vị trí 5. Nếu u vẫn còn phần tử thì quay lại bước 2 Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 10
- Insertion Sort (cont.) 1 void InsertionSort (int a[], int n) 2 { 3 int saved; 4 for (int i = 1; i < n; i++) 5 { 6 saved = a[i]; 7 for (int j = i; j > 0 && saved < a[j - 1]; j--) 8 a[j] = a[j - 1]; 9 a[j] = saved; 10 } 11 } Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 11
- Đánh giá Phân tích chi phí thực hiện theo n (số lượng phần tử của mảng) Trường hợp O(g(n)) tốt nhất ? trung bình ? xấu nhất ? Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 12
- BUBBLE SORT CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Bubble Sort Thuật toán Bubble Sort là một trường hợp cụ thể của Selection Sort. Giai đoạn tìm phần tử nhỏ nhất được thực hiện bằng cách làm cho phần tử nhỏ nhất nổi ra phía đầu của dãy u Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 14
- Bubble Sort (cont.) 1 void BubbleSort (void) 2 { 3 int i, j; 4 for (i = 0; i = i + 1; j--) 6 if (a[j] < a[j - 1]) 7 Swap(a[j], a[j - 1]); 8 } Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 15
- Đánh giá Phân tích chi phí thực hiện theo n (số lượng phần tử của mảng) Trường hợp O(g(n)) tốt nhất ? trung bình ? xấu nhất ? Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 16
- SHELL SORT CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Shell Sort I Được đề xuất bởi [Shell, 1959] I Thuật toán này là cải tiến của thuật toán Insertion Sort I Có sự đột phá về rào cản chi phí O(n2 ) của những thuật toán trước Ý tưởng của thuật toán I Chia dãy a thành h dãy con a0 , a0+h , a0+2h , ... a1 , a1+h , a1+2h , ... a2 , a2+h , a2+2h , ... ... I Sắp xếp từng dãy con bằng cách sử dụng phương pháp chèn trực tiếp Insertion Sort Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 18
- Shell Sort (cont.) Thuật toán sẽ I Sử dụng một 1 dãy {h1 , h2 , ..., ht } là một dãy giảm dần và có ht = 1. I Vấn đề là lựa chọn dãy hi như thế nào cho hiệu quả Các chiến lược cho dãy hi như sau I Shell đề xuất n hi h1 = , hi+1 = 2 2 I Hibbard đề nghị hi = 2 i − 1 I Knuth đưa ra h1 = 1, hi+1 = 3hi + 1 I Pratt đề xuất h1 = 1, hi = 2p 3q Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 19
- Đánh giá Phân tích chi phí thực hiện theo n (số lượng phần tử của mảng) Trường hợp O(g(n)) tốt nhất ? trung bình ? xấu nhất ? Spring 2017 CuuDuongThanCong.com Data structure & Algorithm https://fb.com/tailieudientucntt 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu cơ bản và giải thuật - Chương 1
9 p | 258 | 29
-
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: Chương 10 - Nguyễn Xuân Vinh
31 p | 95 | 10
-
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 | 81 | 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 | 117 | 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 | 88 | 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 | 62 | 7
-
Bài giảng Cấu trúc dữ liệu: Chương Giới thiệu - Nguyễn Xuân Vinh
8 p | 112 | 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 | 174 | 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 - Bùi Tiến Lên
68 p | 40 | 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 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 2 - Th.S Thiều Quang Trung
41 p | 70 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các khái niệm cơ bản
23 p | 48 | 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 | 53 | 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