Phương án sắp xếp QuickSort

Một phần của tài liệu Tài liệu ĐỀ CƯƠNG CHI TIẾT MÔN HỌC KỸ THUẬT LẬP TRÌNH doc (Trang 60 - 62)

II. Truyền tham số mảng cho hàm

7.Phương án sắp xếp QuickSort

Ý tưởng của QuickSort cũng là chia mảng a cần sắp thành 2 phần như phương pháp trộn, tuy nhiên điểm chia được tính toán sao cho phù hợp.

Để xác định được điểm chia, ta sử dụng hàm Partition(L, R). Hàm này sẽ sử dụng để trả về điểm chia làm cơ sở để chia mảng a. Nếu điểm chia là i thì:

i = Partition(L, R);

Khi có điểm chia rồi, ta sẽ chia a thành 2 nửa theo điểm chia và áp dụng việc sắp trên 2 nửa, trộn lại để thu được một mảng đã được sắp. Tuy nhiên để sắp trên 2 nửa của a, ta cũng áp dụng phương pháp tương tự. Như vậy, giải thuật có thể như sau:

void QuickSort(int L, int R) {

int i= Partition(L, R); QuickSort(L, i-1); QuickSort(i+1, R); }

Vấn đề còn lại là hàm Partition xác định điểm chia như thế nào. Ta có thể hình dung điều này như sau:

B1: Lấy phần tử cuối cùng của mảng làm phần tử cầm canh (tức là a[R]).

B2: Cho i chạy từ trái sang cho tới khi gặp phần tử lớn hơn phần tử cầm canh. Cho j chạy từ bên phải về cho tới khi gặp phần tử nhở hơn phần tử cầm canh.

B3: Đảo chỗ hai phần tử a[i] cho a[j]. Cho i, j tiếp tục chạy như trong B2. Tiếp tục đổi chỗ như vậy cho tới khi i và j giao nhau (tức là i>=j).

B4: Đổi chỗ a[i] cho a[j] lần cuối. Khi đó, dễ thấy các phần tử bên trái của a[i] đều nhở hơn a[i] và các phần tử bên phải thì lớn hơn nó. Điểm i chính là điểm chia tìm được. return i;

Thuật toán này, thêm một chút cải tiến sẽ là thuật toán sắp xếp rất tốt (trong trường hợp dữ liệu bất kỳ) với trung bình 2n.lg(n) phép so sánh.

Biªn so¹n: NguyÔn M¹nh Cêng Trang 6 0

Thật vậy, giải thuật Partition cần duyệt qua n phần tử để xác định điểm chia. Khi có điểm chia rồi ta cần sắp xếp các phần tử trên 2 nửa của mảng. (mỗi nửa tính trung bình có n/2 phần tử. Như vậy tổng phí tổn là:

Cn = 2 Cn/2 + n.

CHƯƠNG V: KỸ THUẬT LẬP TRÌNH VỚI CON TRỎ1. Khai báo và sử dụng con trỏ 1. Khai báo và sử dụng con trỏ

Một phần của tài liệu Tài liệu ĐỀ CƯƠNG CHI TIẾT MÔN HỌC KỸ THUẬT LẬP TRÌNH doc (Trang 60 - 62)