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.
CuuDuongThanCong.com CÁC THUẬT TOÁN SẮP XẾP Bùi Tiến Lên 01/01/2017 https://fb.com/tailieudientucntt Bài toán xếp Sắp xếp danh sách đối tượng theo thứ tự công việc phổ biến Sắp xếp yêu cầu thiếu việc viết phần mềm ứng dụng Do đó, nghiên cứu phương pháp xếp cần thiết cho học lập trình CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Bài toán xếp (cont.) Định nghĩa Cho dãy a có n phần tử có thứ tự Hãy xếp dãy {a0 , a1 , , an−1 } theo thứ tự tăng dần CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Các phương pháp xếp Có nhiều phương pháp xếp khác Mỗi phương pháp có đặc điểm riêng Phương pháp Selection Sort Phương pháp Insertion Sort Phương pháp Bubble Sort Phương pháp Shell Sort Phương pháp Heap Sort Phương pháp Merge Sort Phương pháp Quick Sort Phương pháp Radix Sort Phương pháp Counting Sort CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm CuuDuongThanCong.com SELECION SORT https://fb.com/tailieudientucntt Selection Sort Ý tưởng thuật toán sau: Giả sử dãy a chia làm hai phần: phần trái xếp s phần bên phải chưa xếp u s = ∅ u = a Tìm phần tử nhỏ xm u Loại xm khỏi u thêm vào cuối s Nếu u phần tử quay lại bước CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Selection Sort (cont.) 10 11 12 13 void SelectionSort (int a[], int n) { int min; for (int i = 0; i < n; i++) { = i; for (int j = i + 1; j < n; j++) if (a[j] < a[min ]) = j; if (a[min] < a[i]) Swap(a[min], a[i]); } } CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Đánh giá Phân tích chi phí thực theo n (số lượng phần tử mảng) CuuDuongThanCong.com Spring 2017 Trường hợp tốt trung bình xấu O(g(n)) ? ? ? https://fb.com/tailieudientucntt Data structure & Algorithm CuuDuongThanCong.com INSERTION SORT https://fb.com/tailieudientucntt Insertion Sort Ý tưởng thuật toán sau: Giả sử dãy a chia làm hai phần: phần trái xếp s phần bên phải chưa xếp u s = ∅ u = a Lấy phần tử x u Loại x khỏi u Chèn x vào s cho vị trí Nếu u phần tử quay lại bước CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 10 Quick Sort Ý tưởng thuật toán sau: Đây hướng tiếp cận ”chia nhỏ toán” Chia dãy a thành hai dãy bên trái aleft bên phải aright cho phần tử thuộc dãy trái nhỏ phần tử thuộc dãy bên phải Sắp xếp cho dãy aleft aright Nối hai dãy trái phải với a = aleft aright CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 36 Quick Sort (cont.) Chương trình 3: Sau cài đặt hàm Quick Sort 10 11 List QuickSort (List a) { List aleft , aright ; if (a Length 0) { a[i] = j; count[j] ; i++; } } } CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 49 Tài liệu tham khảo Shell, D L (1959) A high-speed sorting procedure Communications of the ACM, 2(7):30–32 CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 50 ... structure & Algorithm 14 Bubble Sort (cont.) void BubbleSort (void) { int i, j; for (i = 0; i = i + 1; j ) if (a[j] < a[j - 1]) Swap(a[j], a[j - 1]); } CuuDuongThanCong.com... cách biểu diễn dãy gồm có phần tử {a0 , a1 , a2 , a3 , a4 , a5 } nhị phân đầy đủ Nút gốc a0 Nút a3 , a4 , a5 Ví dụ Hãy biểu diễn dãy {1, 4, 8, 9, 3, 7} nhị phân đầy đủ Có số nhận xét sau biểu... Data structure & Algorithm 24 Thao tác điều chỉnh nhị phân thành Heap Xét nút Nếu nút xét có giá trị lớn giá trị nút tiến hành đổi chỗ với nút có giá trị lớn Tiếp tục tiến hành tương tự cho nút