Chương 5 Sắp xếp doc

29 421 0
Chương 5 Sắp xếp doc

Đ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

1 CHƯƠNG 5 SẮP XẾP 2 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 3 4.1 bài toán sắp xếp Có một tập n đối tượng. Mỗi đối tượng có nhiều thuộc tính, được thể hiện bằng một kiểu bản 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 gọi là khóa. 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. 4 4.1 bài toán 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ự. 5 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. 6 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<n-1;i++) {int m=i; for(int j=i+1;j<n;j++) if(k[j]<k[m]) m=j; if(m!=i) { x=k[i]; k[i]=k[m]; k[m]=x;} } return; } 7 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]. 8 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]=-∞. 9 5.2 Phương pháp chèn void SX_chen(int *k, int n) {int j; for(int i=2;i<=n;i++) {int x=k[i];j=i-1; while(x<k[j]) {k[j+1]=k[j];j ;} k[j+1]=x; } return; } 10 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. [...]... lại 20 5. 5 Phương pháp vun đống 42 74 23 11 36 65 99 58 94 87 Dãy khóa ban đầu: 42, 23, 74, 11, 65, 58 , 94, 36, 99, 87 21 5. 5 Phương pháp vun đống 99 94 87 36 23 65 11 58 74 42 Sau giai đoạn 1 22 5. 5 Phương pháp vun đống 42 94 87 36 23 65 11 58 74 99 giai đoạn 2: - đổi chỗ về vị trí đúng 23 5. 5 Phương pháp vun đống 42 94 87 36 23 65 58 74 11 giai đoạn 2: - vun đống mới với cây còn lại 24 5. 5 Phương... k[floor(j/2)]=k[j];j=2*j; } k[floor(j/2)]=key; } 27 5. 5 Phương pháp vun đống Đánh giá: - Độ phức tạp của thuật toán là O(nlog2n) 28 Bài tập Bài 1.Cho dãy khóa: 50 ,8,34,6,98,17,83, 25, 66,42,21 ,59 ,62,71, 85, 76 Viết chương trình sắp xếp dãy khóa trên theo thứ tự tăng dần, giảm dần bằng phương pháp:  Sắp xếp chọn  Sắp xếp chèn  Sắp xếp nổi bọt Bài 2: Làm các bài tập chương 6, trang 143-146 sách Cấu trúc... - vun đống mới với cây còn lại 24 5. 5 Phương pháp vun đống 11 36 23 42 87 58 94 65 74 99 Dãy khóa sau khi xếp: 11, 23, 36, 42, 58 , 65, 74, 87, 94, 99 25 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; } 26 5. 5 Phương pháp vun đống void adjust(int *k,int i, int n) {int key=k[i],j=2*i;... kết thúc khi chỉ còn 1 phần tử 15 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 . 1 CHƯƠNG 5 SẮP XẾP 2 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. được sắp xếp theo trường khóa là tên cơ quan để dễ tìm kiếm. 4 4.1 bài toán 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: . 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

Ngày đăng: 03/04/2014, 01:20

Mục lục

    4.1 bài toán sắp xếp

    5.3 Phương pháp nổi bọt

    5.4 Phương pháp sắp xếp nhanh

    5.5 Phương pháp vun đống

    Bài tập

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

Tài liệu liên quan