Tải bản đầy đủ (.pdf) (10 trang)

Cấu trúc dữ liệu và giải thuật (phần 4) docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (218.61 KB, 10 trang )

Shell sort
Shell sort
So sánh a[5] =11 > a[7] = 8

Swap (a[5],a[7])
3 1 13 7 10 8 16 11
3. d=1

So sánh a[0] = 3 > a[1] =1

Swap (a[0],a[1])
1 3 13 7 10 8 16 11
So sánh a[1] = 3 < a[2] =13

!Swap (a[1],a[2])
1 3 13 7 10 8 16 11
So sánh a[2] =13 > a[3] = 7

Swap (a[2],a[3])
1 3 7 13 10 8 16 11
So sánh a[3] =13 > a[4] =10

Swap (a[3],a[4])
1 3 7 10 13 8 16 11
So sánh a[4] =13 > a[5] = 8

Swap (a[4],a[5])
1 3 7 10 8 13 16 11
Shell sort
Shell sort
So sánh a[5] =13 < a[6] = 16



!Swap (a[5],a[6])
1 3 7 10 8 13 16 11
So sánh a[6] = 16 > a[7] =11

Swap (a[6],a[7])
1 3 7 10 8 13 11 16
 Đánh giá thuật toán:
- Tương tự Insertion nhưng Shell sort có số lần so
sánh giảm hơn nhiều
- O(n
2
)
 Bài tập:
Trình bày kết quả của từng bước Shell sort
với d = 5,2,1 với dãy [3,5,2,9,8,1,6,4,7]. Bao nhiêu
phép so sánh được sử dụng
RADIX SORT
RADIX SORT
Radix sort
Radix sort
 Giới thiệu:
– Radix sort – Sắp xếp theo cơ số dựa trên tính chất
"số" của các khóa.
– Radix sort không chỉ so sánh giá trị của các khóa,
mà so sánh các thành phần của khóa. Giả sử các
khóa là các số biểu diễn theo hệ ghi số cơ số M.
Khi đó sắp xếp theo cơ số sẽ so sánh từng ký số
của nó.
Radix sort

Radix sort
 Thuật toán:
– Xem các phần tử trong mảng gồm các lớp có độ
ưu tiên khác nhau. VD: các số tự nhiên gồm các
lớp: đơn vị, chục, trăm, ngàn,
– Duyệt các phần tử từ trên xuống dưới.
– Bước 1: sắp xếp dãy các phần tử ở lớp có độ ưu
tiên thấp nhất (VD: các chữ số hàng đơn vị). Số
nào có hàng đơn vị thấp hơn thì ta đưa lên trên.
– Sau bước 11 dãy sắp xếp mới. Tương tự với các
lớp kế tiếp (chữ số thuộc hàng chục, hàng trăm,…)
cuối cùng sẽ có dãy đã sắp xếp.
Radix sort
Radix sort
Ví dụ: Cho dãy [310, 213, 023, 130, 013, 301,
222, 032, 201, 111, 323, 002, 330, 102, 231, 120]
Bucket Number Contents
0 310, 130, 330, 120
1 301, 201, 111, 231
2 222, 032, 002, 102
3 213, 023, 013, 323
 310, 130, 330, 120, 301, 201, 111, 231, 222, 032,
002, 102, 213, 023, 013, 323
Radix sort
Radix sort
Bucket Number Contents
0 301, 201, 002, 102
1 310, 111, 213, 013
2 120, 222, 023, 323
3 130, 330, 231, 032

 301, 201, 002, 102, 310, 111, 213, 013, 120, 222,
023, 323, 130, 330, 231,032
Radix sort
Radix sort
Bucket Number Contents
0 002, 013, 023, 032
1 102, 111, 120, 130
2 201, 213, 222, 231
3 301, 310, 323, 330
Radix sort
Radix sort
Ví dụ 1: A= [701, 1725, 999, 9170, 3252, 4518, 7009, 1424].
Dãy ban
đầ
u SX theo
hàng
đơ
n v

SX theo
hàng ch

c
SX theo
hàng tr
ă
m
SX theo
hàng nghìn
0 7 0 1 9 1 7 0 0 7 0 1 7 0 0 9 0 7 0 1

1 7 2 5 0 7 0 1 7 0 0 9 9 1 7 0 0 9 9 9
0 9 9 9 3 2 5 2 4 5 1 8 3 2 5 2 1 4 2 4
9 1 7 0 1 4 2 4 1 4 2 4 1 4 2 4 1 7 2 5
3 2 5 2 1 7 2 5 1 7 2 5 4 5 1 8 3 2 5 2
4 5 1 8 4 5 1 8 3 2 5 2 0 7 0 1 4 5 1 8
7 0 0 9 0 9 9 9 9 1 7 0 1 7 2 5 7 0 0 9
1 4 2 4 7 0 0 9 0 9 9 9 0 9 9 9 9 1 7 0
Radix sort
Radix sort
 Đánh giá thuật toán:
- Với một dãy n số, mỗi số có tối đa m chữ số, thuật
toán thực hiện m lần các thao tác phân Bucket và
ghép Bucket.
- Trong thao tác phân Bucket, mỗi phần tử chỉ được
xét đúng một lần, khi ghép cũng vậy.
- Như vậy, chi phí cho việc thực hiện thuật toán hiển
nhiên là O(2m*n) = O(n).

×