Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán sắp xếp - Văn Chí Nam, Nguyễn Thị Hồng Nhung, Đặng Nguyễn Đức Tiến

25 80 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán sắp xếp - Văn Chí Nam, Nguyễn Thị Hồng Nhung, Đặng Nguyễn Đức Tiến

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán sắp xếp cung cấp cho người học các kiến thức về bài toán sắp xếp và thuật toán sắp xếp, radix sort, heap sort, merge sort, selection sort, selection sort. Mời các bạn cùng tham khảo.

Giảng viên: Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến Heap Sort Quick Sort Radix Sort Selection Sort Merge Sort Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt Bài toán xếp Các thuật toán xếp Cấu trúc liệu giải thuật – HCMUS 2016    Bài toán xếp: Sắp xếp trình xử lý danh sách phần tử để đặt chúng theo thứ tự thỏa yêu cầu cho trước Ví dụ: danh sách trước xếp: {1, 25, 6, 5, 2, 37, 40} Danh sách sau xếp: {1, 2, 5, 6, 25, 37, 40} Thơng thường, xếp giúp cho việc tìm kiếm nhanh Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt  Các phương pháp xếp thông dụng:  Bubble Sort  Selection Sort  Insertion Sort  Quick Sort  Merge Sort  Heap Sort  Radix Sort Cần tìm hiểu phương pháp xếp lựa chọn phương pháp phù hợp sử dụng Cấu trúc liệu giải thuật – HCMUS 2016 Selection Sort Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt  Mơ cách xếp tự nhiên thực tế  Chọn phần tử nhỏ đưa vị trí đầu dãy hành  Sau xem dãy hành n-1 phần tử  Lặp lại dãy hành phần tử Cấu trúc liệu giải thuật – HCMUS 2016 Các bước thuật toán:  Bước Khởi gán i =  Bước Bước lặp: Tìm a[min] nhỏ dãy từ a[i] đến a[n-1]  2.2 Hoán vị a[min] a[i]  2.1  Bước So sánh i n:  Nếu i ≤ n tăng i thêm lặp lại bước  Ngược lại: Dừng thuật toán Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt i=0 15 17 i=1 15 17 i=2 15 17 i=3 15 17 i=4 15 17 i=5 15 17 i=6 15 17 i=7 15 17 10  Đánh giá giải thuật:  Số phép so sánh:  Tại lượt i cần (n-i-1) số lần so sánh  Khơng phụ thuộc vào tình trạng dãy số ban đầu Số phép so sánh = Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt 11  Số phép gán:  Tốt nhất:  Xấu nhất: Cấu trúc liệu giải thuật – HCMUS 2016 12  Độ phức tạp thuật toán (không thay đổi): O(n2) Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt 13 Heap Sort Cấu trúc liệu giải thuật – HCMUS 2016 14   Ý tưởng: tìm phần tử nhỏ bước i, phương pháp Selection sort khơng tận dụng thơng tin có nhờ vào phép so sánh bước i-1  cần khắc phục nhược điểm J Williams đề xuất phương pháp xếp Heapsort Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt 15  Định nghĩa Heap:  Giả sử xét trường hợp xếp tăng dần, Heap định nghĩa dãy phần tử al, al+1, … ar thỏa: với i thuộc [l,r] (chỉ số 0) ≥ a2i+1 ≥ a2i+2 {(ai,a2i+1), (ai,a2i+2) cặp phần tử liên đới} Cấu trúc liệu giải thuật – HCMUS 2016 16   Nếu al, al+1, … ar heap phần tử al (đầu heap) phần tử lớn Mọi dãy ai, ai+1, … ar với 2i + > r heap Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt 17   Giai đoạn 1: Hiệu chỉnh dãy ban đầu thành heap (bắt đầu từ phần tử dãy) Giai đoạn 2: xếp dựa heap  Bước 1: đưa phần tử lớn vị trí cuối dãy  Bước 2:  Loại bỏ phần tử lớn khỏi heap: r = r –  Hiệu chỉnh lại phần lại dãy  Bước 3: So sánh r l:  Nếu r > l lặp lại bước  Ngược lại, dừng thuật toán Cấu trúc liệu giải thuật – HCMUS 2016 18  Mã giả (Tựa ngôn ngữ lập trình C): void HeapSort(int a[], int n) { TaoHeap(a,n-1); r = n-1; while(r > 0) { HoanVi(a[0], a[r]); r = r - 1; HieuChinh(a,0,r); } } Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com © FIT-HCMUS https://fb.com/tailieudientucntt 19  Mã giả: void TaoHeap(int a[], int r) { int l = r/2; while(l > 0) { HieuChinh(a,l,r); l = l - 1; } } Cấu trúc liệu giải thuật – HCMUS 2016 20  Mã giả: void HieuChinh(int a[], int l, int r) { i = l; j = 2*i+1; x = a[i]; while(j

Ngày đăng: 11/01/2020, 17:41

Tài liệu cùng người dùng

Tài liệu liên quan