Chapter 5: Sắp xếp
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Chapter 5: Sắp xếpCHƯƠNG 5SẮP XẾP 1 Chương 5: Sắp xếp5.1 Phương pháp chọn5.2 Phương pháp chèn5.3 Phương pháp chèn nhị phân5.4 Phương pháp nổi bọt5.5 Phương pháp sắp xếp nhanh5.6 Phương pháp vun đống 24.1 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ộttrường goi là khoa. ̣ ́ Ví dụ trong bảng danh bạ gồm các bảnghi có tên cơ quan, địa chỉ, số điện thoại.Sổ danh bạ thường được sắp xếp theotrường khóa là tên cơ quan để dễ tìm kiếm. 34.1 bai toan sắp xếp ̀ ́ Sắp xếp là thao tác cần thiết hay gặptrong 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 trongtá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ậplớn các bản ghi lưu trữ trên tệp. Chươngnà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ự. 45.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. 55.1 Phương pháp chọn Thuật toán: void SX_chon(int *k, int n) {int i,x; for(i=1;i5.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]. 75.2 Phương pháp chènCà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]=-∞. 85.2 Phương pháp chèn void SX_chen(int *k, int n) {int j; for(int i=2;i5.3 Phương pháp nổi bọtCà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. 105.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Đánh giá 3 phương pháp:- Độ phức tạp trung bình của thuật toán chung cho cả 3 phương pháp là O(n2) 135.4 Phương pháp sắp xếpnhanhÝ 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. 145.4 Phương pháp sắp xếpnhanhKhi 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ử. 155.4 Phương pháp sắp xếpnhanh void SX_nhanh(int *k, int L, int U) {int B=1; if(L5.4 Phương pháp sắp xếpnhanh swap(&k[L],&k[j]); SX_nhanh(k,L,j-1); SX_nhanh(k,j+1,U); } return;} 175.4 Phương pháp sắp xếpnhanh Đánh giá: - Độ phức tạp trung bình của thuật toán là O(nlog2n) - Khi kích thước phân đoạn đã nhỏ, ta dùng phương pháp sắp xếp đơn giản tiện hơn. 185.5 Phương pháp vun đốngCà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. 195.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. 20 ...
Tìm kiếm theo từ khóa liên quan:
Lập trình C Cấu trúc dữ Liệu toán giải thuật đối tượng nhập xuất thuật toán lập trình ngôn ngữ lập trìnhTài liệu cùng danh mục:
-
Tìm hiểu về lỗi tràn bộ đệm (Buffer Overflow)
5 trang 364 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán trên C++
74 trang 344 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 7 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
16 trang 335 0 0 -
180 trang 274 0 0
-
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 253 0 0 -
173 trang 247 2 0
-
Bài giảng Phân tích thiết kế và giải thuật - Chương 2: Kỹ thuật thiết kế giải thuật
80 trang 244 0 0 -
Kiến thức phần cứng máy tính - Sửa chữa nâng cấp và cài đặt máy tính xách tay Tập 2
483 trang 243 3 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 242 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 6 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
12 trang 240 0 0
Tài liệu mới:
-
Khảo sát tình trạng dinh dưỡng trước mổ ở người bệnh ung thư đại trực tràng
9 trang 21 0 0 -
94 trang 19 0 0
-
Tham vấn Thanh thiếu niên - ĐH Mở Bán công TP Hồ Chí Minh
276 trang 20 0 0 -
Kết hợp luân phiên sóng T và biến thiên nhịp tim trong tiên lượng bệnh nhân suy tim
10 trang 19 0 0 -
Đề thi giữa học kì 1 môn Ngữ văn lớp 9 năm 2024-2025 có đáp án - Trường THCS Nguyễn Trãi, Thanh Khê
14 trang 21 0 0 -
Đánh giá hiệu quả giải pháp phát triển thể chất cho sinh viên Trường Đại học Kiến trúc Hà Nội
8 trang 20 0 0 -
Tỉ lệ và các yếu tố liên quan đoạn chi dưới ở bệnh nhân đái tháo đường có loét chân
11 trang 20 0 0 -
39 trang 19 0 0
-
Đề thi học kì 1 môn Tiếng Anh lớp 6 năm 2024-2025 có đáp án - Trường TH&THCS Quang Trung, Hội An
6 trang 19 1 0 -
Tôm ram lá chanh vừa nhanh vừa dễRất dễ làm, nhanh gọn mà lại ngon. Nhà mình
7 trang 19 0 0