Sắp xếp danh sách lien ket don
lượt xem 23
download
Hoán vị nội dung các phần tử trong danh sách • Cài đặt lại trên xâu một trong những thuật toán sắp xếp đã biết trên mảng • Điểm khác biệt duy nhất là cách thức truy xuất đến các phần tử trên xâu thông qua liên kết thay vì chỉ số như trên mảng.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Sắp xếp danh sách lien ket don
- Sắp xếp danh sách lien ket don Cách tiếp cận: – Phương án 1: Hoán vị nội dung các phần tử trong danh sách (thao tác trên vùng Info). – Phương án 2: Thay đổi các mối liên kết (thao tác trên vùng Next) 11/18/2013 1
- Sắp xếp danh sách Hoán vị nội dung các phần tử trong danh sách • Cài đặt lại trên xâu một trong những thuật toán sắp xếp đã biết trên mảng • Điểm khác biệt duy nhất là cách thức truy xuất đến các phần tử trên xâu thông qua liên kết thay vì chỉ số như trên mảng. 11/18/2013 2
- Sắp xếp danh sách Hoán vị nội dung các phần tử trong danh sách • Do thực hiện hoán vị nội dung của các phần tử nên đòi hỏi sử dụng thêm vùng nhớ trung gian chỉ thích hợp với các xâu có các phần tử có thành phần Info kích thước nhỏ. • Khi kích thước của trường Info lớn, việc hoán vị giá trị của hai phân tử sẽ chiếm chi phí đáng kể. • Không tận dụng được các ưu điểm của xâu! 11/18/2013 3
- List – Sắp xếp Hoán vị nội dung các phần tử trong danh sách void ListSelectionSort (LIST &l) { NODE *min, *p,*q; p = l.pHead; while(p != l.pTail) { q = p->pNext; min = p; while(q != NULL) { if(q->Info< min->Info ) min = q; // ghi nhaän vò trí phaàn töû min hieän haønh q = q->pNext; } Hoanvi(min->Info, p->Info); p = p->pNext; } } 11/18/2013 4
- List – Sắp xếp Thay đổi các mối liên kết • Thay vì hoán đổi giá trị, ta sẽ tìm cách thay đổi trình tự móc nối của các phần tử sao cho tạo lập nên được thứ tự mong muốn chỉ thao tác trên các móc nối (pNext). • Kích thước của trường pNext: – Không phụ thuộc vào bản chất dữ liệu lưu trong xâu – Bằng kích thước 1 con trỏ (2 hoặc 4 byte trong môi trường 16 bit, 4 hoặc 8 byte trong môi trường 32 bit…) 11/18/2013 5
- List – Sắp xếp Thay đổi các mối liên kết • Một trong những cách thay đổi móc nối đơn giản nhất là tạo một danh sách mới là danh sách có thứ tự gồm các phần tử trích từ danh sách cũ. 11/18/2013 6
- List – Sắp xếp Thay đổi các mối liên kết • Giả sử danh sách mới sẽ được quản lý bằng con trỏ đầu xâu Result, ta có thuật toán chọn trực tiếp của phương án 2 như sau: – B1: Khởi tạo danh sách mới Result là rỗng; – B2: Tìm trong danh sách cũ l phần tử nhỏ nhất – min; – B3: Tách min khỏi danh sách cũ; – B4: Chèn min vào cuối danh sách Result; – B5: Lặp lại bước 2 khi chưa hết danh sách cũ; 11/18/2013 7
- List – Sắp xếp chọn trực tiếp min pTail pHead 10 4 2 8 6 pHead2 pTail2 11/18/2013 8
- List – Sắp xếp chọn trực tiếp min pTail pHead 10 4 2 8 6 pHead2 pTail2 11/18/2013 9
- List – Sắp xếp chọn trực tiếp min pTail pHead 10 4 2 8 6 pHead2 pTail2 11/18/2013 10
- List – Sắp xếp chọn trực tiếp min pTail pHead 10 4 2 8 6 pHead2 pTail2 11/18/2013 11
- List – Sắp xếp chọn trực tiếp min pTail pHead 10 4 2 8 6 pHead2 pTail2 11/18/2013 12
- List – Sắp xếp chọn trực tiếp void ListSelectionSort2 (LIST &list) { LIST lRes; NODE *min, *minprev; Init(lRes); while(list.pHead != NULL) { minprev = FindMinprev(list); min = PickAfter(list, minprev); AddTail(lRes, min); } list = lRes; 11/18/2013 13 }
- List – Sắp xếp chọn trực tiếp NODE* FindMinprev (LIST list) { NODE *min, *minprev, *p, *q; minprev = q = NULL; min=p =list.pHead; while(p != NULL){ if (p->Info < min->Info) { min = p; minprev = q; } q = p; p = p->pNext; } return minprev; } 11/18/2013 14
- List Một số thuật toán sắp xếp hiệu quả • Thuật toán Quick Sort • Thuật toán Merge Sort • Thuật toán Radix Sort 11/18/2013 15
- List –Quick Sort: Thuật toán //input: xâu (head, tail) //output: xâu đã được sắp tăng dần • Bước 1: Nếu xâu có ít hơn 2 phần tử Dừng;//xâu đã có thứ tự • Bước 2: Chọn X là phần tử đầu xâu L làm ngưỡng. Trích X ra khỏi L. • Bước 3: Tách xâu L ra làm 2 xâu L1 (gồm các phần tử nhỏ hơn hay bằng X) và L2 (gồm các phần tử lớn hơn X). • Bước 4: Sắp xếp Quick Sort (L1). • Bước 5: Sắp xếp Quick Sort (L2). • Bước 6: Nối L1, X, và L2 lại theo trình tự ta có xâu L đã được sắp xếp. 11/18/2013 16
- List – Sắp xếp quick sort 1 pHead 8 4 5 2 6 11/18/2013 17
- List – quick sort: phân hoạch 1 pHead 8 X 4 5 2 6 Chọn phần tử đầu xâu làm ngưỡng 11/18/2013 18
- List – quick sort: phân hoạch pH1 1 pHead 8 X 4 5 2 6 pH2 Tách xâu hiện hành thành 2 xâu 11/18/2013 19
- List – quick sort: phân hoạch pH1 1 pHead 8 X 4 5 2 6 pH2 Tách xâu hiện hành thành 2 xâu 11/18/2013 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Danh sách liên kết đơn (List)
83 p | 612 | 155
-
CẤU TRÚC DỮ LIỆU - Chương 6: DANH SÁCH (LIST)
85 p | 637 | 109
-
CÁC THAO TÁC TRÊN DANH SÁCH LIÊN KẾT ĐƠN C++
6 p | 876 | 97
-
Chương 3: CẤU TRÚC DỮ LIỆU ĐỘNG
80 p | 158 | 30
-
Danh sách liên kết đơn
88 p | 120 | 14
-
Bài giảng Kỹ thuật lập trình: Danh sách liên kết - ThS. Đặng Bình Phương
20 p | 111 | 10
-
Bài giảng Danh sách liên kết
88 p | 129 | 10
-
Giới thiệu môn học Cấu trúc dữ liệu và giải thuật - Nguyễn Minh Thành
13 p | 103 | 7
-
Cấu trúc dữ liệu và giải thuật I - Bài 8
15 p | 77 | 6
-
Cấu trúc dữ liệu bài thực hành tuần 2
4 p | 63 | 6
-
Giáo trình hình thành công thức ứng dụng cấu tạo hàm Input new data để tách một list thành nhiều danh sách p1
10 p | 62 | 5
-
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 3: Cấu trúc dữ liệu động
40 p | 100 | 5
-
Giáo trình hướng dẫn dùng hàm Input new data để tạo mới danh sách và tách một list thành nhiều danh sách p4
5 p | 84 | 3
-
Giáo trình Cấu trúc dữ liệu và giải thuật - Nghề: Lập trình máy tính - CĐ Kỹ Thuật Công Nghệ Bà Rịa-Vũng Tàu
86 p | 54 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật (Data structures and Algorithms): Chương giới thiệu - Ngô Công Thắng
2 p | 44 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4.2 - Trần Minh Thái (2016)
27 p | 55 | 2
-
Java: Hệ thống thuật toán và cấu trúc dữ liệu - Phần 1
261 p | 7 | 1
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