Sắp xếp dựa trờn phõn hoạch – QuickSort 1 Giải thuật

Một phần của tài liệu giáo trình cấu trúc dữ liệu (Trang 36)

CÁC THUẬT TOÁN SẮP XẾP VÀ TèM KIẾM 3.1 Cỏc thuật toỏn tỡm kiếm

3.2.5. Sắp xếp dựa trờn phõn hoạch – QuickSort 1 Giải thuật

3.2.5.1. Giải thuật

Để sắp xếp dóy a1, a2 …an giải thuật Quick Sort dựa trờn việc phõn hoạch dóy ban đầu thành 2 dóy con khỏc nhau :

- Dóy con 1 : Gồm cỏc phần tử a1 …ai cú giỏ trị khụng lớn hơn x. - Dóy con 2 : Gồm cỏc phần tử ai …an cú giỏ trị khụng nhỏ hơn x. Với x là giỏ trị của một phần tử tuỳ ý trong dóy ban đầu. Sau khi thực hiện phõn hoạch, dóy ban đầu được chia làm 3 phần :

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

Trong đú dóy con thứ hai đó cú thứ tự, nếu cỏc dóy con 1 và 3 chỉ cú 1 phần tử thỡ chỳng cũng đó cú thứ tự, khi đú dóy ban đầu đó được sắp. Ngược lại, nếu cỏc dóy con 1 và 3 cú nhiều hơn 1 phần tử thỡ dóy ban đầu chỉ được sắp khi cỏc dóy con 1, 3 cú thứ tự. Để sắp xếp dóy con 1 và 3, lần lượt tiến hành phõn hoạch từng dóy con theo cựng phương phỏp phõn hoạch dóy ban đầu vừa trỡnh bày…

Vấn đề cũn lại bõy giờ là xõy dựng một thủ tục phõn hoạch cho dóy ban đầu, điều này phụ thuộc nhiều vào việc xỏc định phần tử làm mốc ban đầu, mốc được chọn làm sao để tạo ra hai dóy con cõn bằng nhau, điều này rất mất thời gian. Vỡ vậy người ta thường chọn phần tử đầu tiờn của mảng làm mốc, giả sử dóy ban đầu là mảng gồm cú cỏc phần tử a[i]...a[j], tức là lấy p= a[i] làm mốc. Sau đú sử dụng cỏc biến L chạy từ trỏi sang phải bắt đầu từ vị trớ thứ i, biến k chạy từ phải sang trỏi bắt đầu từ j +1. Biến L được tăng cho tới khi a[L] >p, cũn biến k được giảm cho tới khi a[k]<=p, Nếu L < k thỡ ta đổi giỏ trị của a[L] và a[k]. Quỏ trỡnh đú lặp đi lặp lại cho đến khi L > k. Cuối cựng ta trao đổi vị trớ a[i] và a[k] để đặt mốc vào đỳng vị trớ của nú.

Một phần của tài liệu giáo trình cấu trúc dữ liệu (Trang 36)

Tải bản đầy đủ (DOC)

(104 trang)
w