Phƣơng pháp sắp xếp nhanh (Quick sort) a Ý tƣởng:

Một phần của tài liệu Giáo trình Nhập môn cấu trúc dữ liệu và giải thuật (Nghề: Thiết kế đồ hoạ - CĐ/TC) - Trường Cao đẳng nghề Đồng Tháp (Trang 43 - 47)

a. Ý tƣởng:

Cĩ dãy số: a1, a2, ..., an

Giải thuật QuickSort làm việc nhƣ sau:

Chọnx là một phần tử làm biên: thƣờng chọn là phần tử ở giữa dãy số. Phân hoạc dãy thành 3 dãy con

1. ak <= x , với k = 1..i 2. ak = x , với k = i..j 3. ak > =x , với k = j..N

Nếu số phần tử trong dãy con 1, 3 lớn hơn 1 thì ta tiếp tục phân hoạch dãy 1, 3 theo phƣơng pháp trên. Ngƣợc lại thì: dừng.

b. Thuật tốn

Giải thuật phân hoạch dãy am, am+1, ., an thành 2 dãy con:

Bƣớc 1 : Chọn tùy ý một phần tử a[k] trong dãy là giá trị biên, m<= k <=n: x = a[k]; i = m; j = n;

Bƣớc 2 : Phát hiện và hiệu chỉnh cặp phần tử a[i], a[j] nằm sai vị trí: Bƣớc 2a : Trong khi (a[i]<x) i++;

Bƣớc 2b : Trong khi (a[j]>x) j--; Bƣớc 2c : Nếu i<= j

// a[i]>= x; a[j]<=x mà a[j] đứng sau a[i] Hốn vị (a[i],a[j]);

i++; j--; Bƣớc 3 :

Nếu i <= j: Lặp lại Bƣớc 2.//chƣa xét hết mảng Ngƣợc lại: Dừng

Cĩ thể phát biểu giải thuật sắp xếp QuickSort một cách đệ qui nhƣ sau : Bƣớc 1 : Phân hoạch dãy am… anthành các dãy con :

- Dãy con 1 : am.. aj <= x - Dãy con 2 : aj+1.. ai-1 = x - Dãy con 1 : ai.. an >= x Bƣớc 2 :

Nếu ( m < j ) // dãy con 1 cĩ nhiều hơn 1 phần tử Phân hoạch dãy am.. aj

Nếu ( i < n ) // dãy con 3 cĩ nhiều hơn 1 phần tử Phân hoạch dãy ai.. ar

Ví dụ:

Cho dãy số a:

12 2 8 5 1 6 4 15

hoạch đoạn l =1, r = 3: x = A[2] = 2

hoạch đoạn l = 5, r = 8: x = A[6] = 6

Phân

Phân

hoạch đoạn l = 7, r = 8: x = A[7] = 6

Dừng.

c. Cài đặt

d. Ðánh giá giải thuật

Hiệu qủa thực hiện của giải thuật QuickSort phụ thuộc vào việc chọn giá trị mốc. Trƣờng hợp tốt nhất xảy ra nếu mỗi lần phân hoạch đều chọn đƣợc phần tử median (phần tử lớn hơn (hay bằng) nửa số phần tử, và nhỏ hơn (hay bằng) nửa số phần tử cịn lại) làm mốc, khi đĩ dãy đƣợc phân chia thành 2 phần bằng nhau và cần log2(n) bƣớc phân hoạch thì sắp xếp xong.

Nhƣng nếu mỗi bƣớc phân hoạch phần tử đƣợc chọn cĩ giá trị cực đại (hay cực tiểu) là mốc, dãy sẽ bị phân chia thành 2 phần khơng đều: một phần chỉ cĩ 1 phần tử, phần cịn lại gồm (n-1) phần tử, do vậy cần thực hiện n bƣớc phân hoạch mới sắp xếp xong. Ta cĩ bảng tổng kết

Trƣờng hợp Ðộ phức tạp Tốt nhất n*log(n)

CHƢƠNG V:

TÌM KIẾM

Một phần của tài liệu Giáo trình Nhập môn cấu trúc dữ liệu và giải thuật (Nghề: Thiết kế đồ hoạ - CĐ/TC) - Trường Cao đẳng nghề Đồng Tháp (Trang 43 - 47)