Chương 5: sắp xếp
lượt xem 47
download
Đỉnh có bậc vào và bậc ra cùng bằng 0 gọi là đỉnh cô lập. Đỉnh có bậc vào bằng 1 và bậc ra bằng 0 gọi là đỉnh treo, cung có đỉnh cuối là đỉnh treo gọi là cung treo
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Chương 5: sắp xếp
- CHƯƠNG 5 SẮP XẾP 1
- Chương 5: Sắp xếp 5.1 Phương pháp chọn 5.2 Phương pháp chèn 5.3 Phương pháp chèn nhị phân 5.4 Phương pháp nổi bọt 5.5 Phương pháp sắp xếp nhanh 5.6 Phương pháp vun đống 2
- Bai toan sắp xếp ̀ ́ Có môt tâp n đôi tượng. Môi đôi tượng ̣ ̣ ́ ̃ ́ có nhiêu thuôc tinh, được thể hiên băng môt ̀ ̣ ́ ̣ ̀ ̣ kiêu ban ghi gôm nhiêu trường. Sắp xếp là ̉ ̉ ̀ ̀ quá trình bố trí lại các bản ghi theo một trường goi là khoa. ̣ ́ Ví dụ trong bảng danh bạ gồm các bản ghi có tên cơ quan, địa chỉ, số điện thoại. Sổ danh bạ thường được sắp xếp theo trường khóa là tên cơ quan để dễ tìm kiếm. 3
- Bai toan sắp xếp ̀ ́ Sắp xếp là thao tác cần thiết hay gặp trong quá trình lưu trữ và quản lý dữ liệu. Có 2 phương pháp sắp xếp: sắp xếp trong tác động lên các bản ghi lưu trữ ở bộ nhớ trong và Sắp xếp ngoài liên quan đến tập lớn các bản ghi lưu trữ trên tệp. Chương này chỉ xét bài toán sắp xếp trong theo thứ tự tăng của khóa. Sắp xếp theo thứ tự giảm được làm hoàn toàn tương tự. 4
- 5.1 Phương pháp chọn Ý tưởng: Dãy khóa cần sắp xếp là k[1],k[2],…, k[n]. Ở lượt thứ i (i=1,2,3,…,n-2) ta sẽ chọn trong dãy khóa k[i+1],…., k[n] khóa nhỏ nhất và đổi chỗ nó với k[i] Sau n-1 lượt khóa từ nhỏ đến lớn sẽ được sắp xếp ở các vị trí thứ 1, thứ 2,…thứ n-1, thứ n. 5
- 5.1 Phương pháp chọn Thuật toán: void SX_chon(int *k, int n) {int i,x; for(i=1;i
- 5.2 Phương pháp chèn Ý tưởng: Dãy khóa cần xếp là k[1], k[2],…, k[n]. Đầu tiên khóa k[1] chỉ có một khóa đã được sắp xếp. Xét thêm k[2],so sánh nó với k[1] để xác định chỗ chèn nó vào và ta có 2 khóa được sắp xếp. Đối với k[3] lại so sánh với k[2], k[1] và cứ như vậy đến khi xét xong k[n]. 7
- 5.2 Phương pháp chèn Cài đặt: Để có chỗ cho khóa mới phải dịch chuyển các khóa lùi lại sau và dùng X làm ô nhớ phụ chứa khóa đang được xét. Để khóa mới dù ở vị trí đầu tiên cũng được chèn vào giữa khóa nhỏ và lớn hơn nó, ta thêm vào khóa giả k[0]=-∞. 8
- 5.2 Phương pháp chèn void SX_chen(int *k, int n) {int j; for(int i=2;i
- 5.3 Phương pháp nổi bọt Cài đặt: Bảng các khóa sẽ được duyệt từ đáy lên đỉnh. Dọc đường nếu gặp 2 khóa kế cận ngược thứ tự ta sẽ đổi chỗ chúng với nhau. Sau mỗi lượt sắp xếp các giá trị khóa nhỏ sẽ nổi dần lên giống như bọt nước trong nồi nước đang sôi. 10
- 5.3 Phương pháp nổi bọt void SX_noibot(int *k, int n) {for(int i=1;i=i+1;j--) if(k[j]
- 5.3 Phương pháp nổi bọt void swap(int *c,int *d) {int a; a=*c; *c=*d; *d=a; return; } 12
- 5.4 Phương pháp sắp xếp nhanh Ý tưởng: Chọn khóa đầu tiên của dãy làm chốt. Mọi phần tử nhỏ hơn khóa chốt phải được xếp vào đầu dãy. Mọi phần tử lớn hơn khóa chốt phải được xếp vào cuối dãy. Muốn vậy, các phần tử trong dãy sẽ được so sánh với khóa chốt và sẽ đổi vị trí cho nhau. 13
- 5.4 Phương pháp sắp xếp nhanh Khi việc đổi chỗ đã thực hiện xong, dãy khóa được phân làm 2 đoạn. Đoạn đầu gồm các khóa nhỏ hơn chốt, đoạn sau gồm các khóa lớn hơn chốt, khóa chốt nằm giữa 2 đoạn. Hai đoạn sẽ được xử lý riêng giống như vậy. Quá trình xử lý từng đoạn sẽ kết thúc khi chỉ còn 1 phần tử. 14
- 5.4 Phương pháp sắp xếp nhanh void SX_nhanh(int *k, int L, int U) {int B=1; if(L
- 5.4 Phương pháp sắp xếp nhanh swap(&k[L],&k[j]); SX_nhanh(k,L,j-1); SX_nhanh(k,j+1,U); } return;} 16
- 5.5 Phương pháp vun đống Cài đặt: Trước hết phải tạo đống là tạo ra cây nhị phân hoàn chỉnh mà khóa ở nút cha bao giờ cũng lớn hơn khóa ở các nút con của nó. Cây nhị phân này được lưu trữ kế tiếp trong máy. 17
- 5.5 Phương pháp vun đống Giai đoạn thứ 2 gồm: - Đổi chỗ của vị trí cuối cùng với khóa ở gốc của đống để đưa khóa lớn nhất về vị trí đúng. - Vun lại thành đống cho cây chứa những nút còn lại. 18
- 5.5 Phương pháp vun đống void SX_vundong(int *k, int n) {for(int i=floor(n/2);i>=1;i--) adjust(k,i,n); for(i=n-1;i>=1;i--) {swap(&k[i+1],&k[1]); adjust(k,1,i); } return; } 19
- 5.5 Phương pháp vun đống void adjust(int *k,int i, int n) {int key=k[i],j=2*i; while(j
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu & thuật toán: Chương 5 - Nguyễn Đức Nghĩa
0 p | 343 | 138
-
Chương 5. Mảng, con trỏ, tham chiếu
16 p | 307 | 114
-
NGHIÊN CỨU CẤU TRÚC HSDPA -5
8 p | 173 | 57
-
Bài giảng Ngôn ngữ lập trình C++: Chương 5 - Trần Minh Châu
77 p | 153 | 34
-
Chương 5: Cây ( Tree)
152 p | 151 | 30
-
MS Access - Chương 5: Sắp xếp và lọc thông tin
10 p | 127 | 27
-
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
181 p | 58 | 22
-
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương giới thiệu - Nguyễn Khánh Phương
8 p | 82 | 21
-
Bài giảng Photoshop - Chương 5: Cơ bản về layer
25 p | 53 | 13
-
Bài giảng Ngôn ngữ lập trình C - Chương 5: Mảng một chiều
11 p | 150 | 12
-
Bài giảng Lập trình trên Windows: Chương 5.3 - Trần Minh Thái
25 p | 70 | 7
-
Bài giảng Kỹ thuật lập trình Java - Chương 5: Mảng
32 p | 66 | 7
-
MS Access - Chương 5: Sắp xếp và lọc thông tin
6 p | 93 | 6
-
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 5 - Trịnh Anh Phúc
99 p | 31 | 5
-
Bài giảng Tin học đại cương 2: Chương 5 - Nguyễn Thị Mỹ Truyền
32 p | 49 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật (Data Structures and Algorithms): Chương 0 - GV. Ngô Công Thắng
3 p | 8 | 4
-
Bài giảng Cấu trúc dữ liệu - Chương 5: Sắp xếp
29 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - TS. Nguyễn Thị Kim Thoa
52 p | 12 | 3
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