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