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..
Trang 1Shell sort
So sánh a[5] =11 > a[7] = 8 Swap (a[5],a[7])
3 d=1 So sánh a[0] = 3 > a[1] =1 Swap (a[0],a[1])
So sánh a[1] = 3 < a[2] =13 !Swap (a[1],a[2])
So sánh a[2] =13 > a[3] = 7 Swap (a[2],a[3])
So sánh a[3] =13 > a[4] =10 Swap (a[3],a[4])
So sánh a[4] =13 > a[5] = 8 Swap (a[4],a[5])
Trang 2Shell sort
So sánh a[5] =13 < a[6] = 16 !Swap (a[5],a[6])
So sánh a[6] = 16 > a[7] =11 Swap (a[6],a[7])
Đá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(n2)
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
Trang 3RADIX SORT
Trang 4Radix 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ó
Trang 5Radix 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 11 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
Trang 6Radix sort
Ví dụ: Cho dãy [310, 213, 023, 130, 013, 301,
222, 032, 201, 111, 323, 002, 330, 102, 231, 120]
310, 130, 330, 120, 301, 201, 111, 231, 222, 032,
002, 102, 213, 023, 013, 323
Trang 7Radix sort
301, 201, 002, 102, 310, 111, 213, 013, 120, 222,
023, 323, 130, 330, 231,032
Trang 8Radix sort
Trang 9Radix sort
hàng đơn vị
SX theo hàng chục
SX theo hàng trăm
SX theo hàng nghìn
Trang 10Radix 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)