Lớp IT003.I22.KHCL – học kỳ II năm học 2017-2018 BÁO CÁO KẾT QUẢ THỬ NGHIỆM Thuật toán QUICKSORT Thời gian thực hiện: 10/03 – 11/04/2018 Sinh viên thực hiện: Dương Phúc Huân.(A1) Nguyễn Tiến Công.(A2) Nội dung báo cáo: I Tóm tắt thuật tốn A Ý tưởng: Giải thuật QuickSort xếp dãy a1, a2 , aN dựa việc phân hoạch dãy ban đầu thành phần : • Phần 1: Gồm phần tử có giá trị bé x • Phần 2: Gồm phần tử có giá trị x • Phần 3: Gồm phần tử có giá trị lớn x với x giá trị phần tử tùy ý dãy ban đầu Sau thực phân hoạch, dãy ban đầu phân thành đoạn: • ak ≤ x , với k = j • ak = x , với k = j+1 i-1 • ak x , với k = i N Đoạn thứ có thứ tự Nếu đoạn có phần tử : có thứ tự dãy ban đầu Đoạn thứ có thứ tự Nếu đoạn có nhiều phần tử dãy ban đầu có thứ tự đoạn 1, Để xếp đoạn 3, ta tiến hành việc phân hoạch dãy theo phương pháp phân hoạch dãy ban đầu vừa trình bày … Thuật toán: Bước : Chọn tùy ý phần tử a[k] dãy giá trị mốc ( left≤ k ≤ right): x = a[k]; i = left; j = right Bước : Phát hiệu chỉnh cặp phần tử a[i], a[j] nằm sai chỗ : Bước 2a : Trong (a[i]x) j ; Bước 2c : Nếu i< j Bước : Nếu i < j: Swap(a[i],a[j]); Lặp lại Bước Ngược lại: Dừng Minh họa với ví dụ cụ thể: Cài đặt NNLT cụ thể: void QuickSort(long *&a, long left, long right) { long i, j, x; x = a[(left+right)/2]; i = left; j = right; { while(a[i] < x) i++; while(a[j] > x) j ; if(i