Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
4,07 MB
Nội dung
10/14/2018 Nội dung QuickSort CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Data Structures & Algorithms Merge Sort Heap Sort SẮP XẾP (TT) Quick Sort Quick Sort Quick Sort 10/14/2018 Quick Sort-Ý 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 Quick Sort – Ý tưởng Quick Sort – Ý tưởng Sau thực phân hoạch, dãy ban đầu phân thành đoạn: •1 ak ≤ x , với k = j •2 ak = x , với k = j+1 i-1 •3 ak x , với k = i N Quick Sort – Ý tưởng • Đoạn thứ có thứ tự • Đoạn thứ có thứ tự • Nếu đoạn có phần tử : có thứ tự dãy ban đầu Quick Sort – Ý tưởng • Bước 1: Nếu left ≥ right //dãy có phần tử Kết thúc; //dãy xếp • Bước 2: Phân hoạch dãy aleft … aright thành đoạn: aleft aj, aj+1 ai-1, aright Đoạn x Đoạn 2: aj+1 ai-1 = x Đoạn 3: aright x • Bước 3: Sắp xếp đoạn 1: aleft aj • Bước 4: Sắp xếp đoạn 3: aright • 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 … Quick Sort – Ý tưởng • Bước : Chọn tùy ý phần tử a[k] dãy giá trị mốc ( l ≤ k ≤ r): x = a[k]; i = l; j = r; • 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 Swap(a[i],a[j]); • Bước : Nếu i < j: Ngược lại: Dừng Lặp lại Bước 2 10/14/2018 Quick Sort – Ý tưởng Quick Sort – Ví dụ • Cho dãy số a: 12 Phân hoạch đoạn l =0, r = 7: 12 15 x = a[3] = l=0 Quick Sort – Ví dụ 15 r=7 Quick Sort – Ví dụ Quick Sort – Ví Dụ • Phân hoạch đoạn l = 0, r = 2: i=0 12 j=6 l=0 15 r=7 4 i=1 i=2 12 j=3 j=4 j=5 12 12 15 15 l=0 l=0 r=7 Quick Sort – Ví dụ r =3 i=0 j=2 Quick Sort – Ví dụ Quick Sort – Ví Dụ • Phân hoạch đoạn l =4, r = 7: • Phân hoạch đoạn l =6, r = 7: l=4 i=4 i = 46 l=4 12 15 j=6 j=6 j=7 12 15 r =7 r =7 15 10/14/2018 Quick Sort – Giải thuật Partition – Phân hoạch Partition – Phân hoạch Quick Sort – Cài đặt Quick Sort – Ví dụ Quick Sort – Ví dụ Phân hoạch đọan [0,7] Phân hoạch đọan [0,7] X i j 12 55 15 left X i j 12 15 right left right 24 10/14/2018 Quick Sort – Ví dụ Quick Sort – Ví dụ Phân hoạch đọan [0,2] Phân hoạch đọan [0,2] j i i j 12 15 12 15 right left left X right 25 26 Quick Sort – Ví dụ Quick Sort – Ví dụ Phân hoạch đọan [4,7] Phân hoạch đọan [5,7] i 4 left j 12 15 X j i 12 15 right left right 27 28 Quick Sort – Ví dụ Quick Sort – Ví dụ Phân hoạch đọan [5,7] i j 12 15 left 12 15 right 29 30 10/14/2018 Quick Sort – Đánh giá Quick Sort – Độ phức tạp 31 Quick Sort – Nhận xét 32 Quick Sort – Bài Tập Cho biết kết bước xếp dãy sau tăng dần thuật toán quick Sort M={3,5,33,1,8,12,4,23,8} 33 34 Quick Sort – Cách khác Quick Sort – Bài Tập M={3,5,33,1,8,12,4,23,8} 35 36 10/14/2018 Quick Sort – Cách khác Quick Sort – Cách khác 37 38 Merge Sort – Trộn Merge Sort – Trộn Tư tưởng trộn: • Có mảng xếp chiều dài a,b • Tạo mảng chung xếp a 10 b 11 20 13 10 14 11 13 14 20 40 39 Merge Sort – Trộn Ý Tưởng Merge Sort – Trộn Bước 1: chọn phần tử đầu dãy chép qua mảng kết 10 11 20 13 14 i=0 Bước 2: hủy phần tử Bước 3: chưa đến cuối mảng trở bước Nếu đến cuối mảng: chép phần lại mảng j=0 vào mảng kết 41 42 10/14/2018 Merge Sort – Trộn 10 Merge Sort – Trộn 13 14 10 11 20 13 14 i=1 i=0 11 20 j=1 j=1 2 43 44 Merge Sort – Trộn Merge Sort – Trộn Thực 10 13 14 i=1 10 11 20 14 i=1 11 20 j=2 13 j=3 4 45 46 Merge Sort – Trộn 10 Merge Sort – Trộn 13 Chép phần lại mảng 14 i=8 j=7 11 i=8 20 20 J=5 j=6 J=5 1 10 11 13 10 11 13 14 20 14 47 48 10/14/2018 Merge Sort – Trộn Merge Sort – Trộn Ví dụ khác ta có a=(1,3,7,9), b=(2,6), q trình hịa nhập diễn sau: Danh sách a 1,3,7,9 3,7,9 3,7,9 7,9 7,9 Danh sách b 2,6 2,6 6 So sánh 1