Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
469 KB
Nội dung
1 SẮPXẾ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ắpxếp nhanh 5.6 Phương pháp vun đống ! " #$ % " & ' (( &) *" &' + ' ,- .' + (, + ' (/ #01 2(3/4,5/607&3&,89: /; 0 . # <6=>/,8=,7?&3&,8 &@'&2(*"A&B*5"C7#D =,7;"E&9/; .@01'&2("F=G4.# H 013&&IJK/ 2(3/40(/LM12(80N=L0C(#@ 3/3&": 0'&3&,80(/LO,:P/M1 10'2("Q0P&3&,8 0(/L/'C#1J&BR,13 /9ST-&U.@# 9ST8"E&0111 T# #VW3&X Ý tưởng: Dãy khóa cần sắpxế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ắpxếp ở các vị trí thứ 1, thứ 2,…thứ n-1, thứ n. Y #VW3&X 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; } Z #W3&[ Ý 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]. \ #W3&[ 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]=-∞. ] #W3&[ 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; } V^ #W3D,X 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ắpxế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. [...]... k[floor(j/2)]=key; } 20 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ắpxế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ắpxế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 dữ liệu và giải thuâ ̣t, Đỗ Xuân Lôi, NXB Đa ̣i ho ̣c Quố c gia Hà Nô ̣i 21 ... *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... 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 . 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. #W3&[ Ý 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]