Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
411,5 KB
Nội dung
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ắpxế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ắpxế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ắpxế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ắpxế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ắ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ắ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ắ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.
[...]... 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ắpxế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