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 (29.06 KB, 1 trang )
Trường đại học Bách khoa Hà Nội
Viện công nghê thông tin và truyền thông
Bài tập số 3: Mô tả một thuật toán sắp xếp
Họ và tên: Lê Anh Hào
Lớp: CNTT Việt nhật 01-k63
MSSV: 20184092
1. Bài toán
Cho dãy X = {X1, X1, ..., Xn}, hãy sắp xếp dãy theo chiều không giảm.
2. Ý tưởng
- Ý tưởng của thuật toán này là "chia để trị", nói cách khác chúng ta tìm cách chia đôi
dãy ban đầu bằng cách chọn ra một phần tử là chốt (pivot). Từ dãy ban đầu, tất cả
phần tử nhỏ hơn phần tử chốt thì đưa về bên trái dãy, tất cả các phần tử lớn hơn hoặc
bằng phần tử chốt thì đưa về bên phải dãy. Sau bước này ta có phần tử chốt là đứng
đúng vị trí. Dãy ban đầu phân chia làm hai dãy con nằm hai bên chốt.
- Tiếp tục phân chia các dãy con theo cách tương tự đến khi mọi dãy con đều có độ dài
bằng 1.
- Có thể lựa chọn phần tử chốt nằm đầu, cuối hay giữa dãy. Ở đây ta sẽ lựa chọn phần
tử chốt nằm gần giữa dãy nhất.
3. Giải thuật
Sắp xếp một đoạn bất kỳ X[L],...,X[R] với điều kiện L < R
- Bước 1: pirot = (L+R) div 2, key=X[pirot]
- Bước 2: i=L+1, j=R
- Bước 3:
* Nếu X[i] < key thì i=i+1;
* Nếu X[j] > key thì j=j-1;
- Bước 3: Nếu i>j thì đổi chổ X[i] với X[j], quay về Bước 3
- Bước 4: Lặp lại từ Bước 1 đến Bước 3 với đoạn X[L],...,X[j-1] và X[j] đến X[R], dừng
khi tất cả đoạn có độ dài là 1.