1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bai giang thuat toan tim kiem va sap xep (1)

25 210 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 25
Dung lượng 378,5 KB

Nội dung

Quick Sort  Ý tưởng: CẤU TRÚC DỮ LIỆU GIẢI THUẬT  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  Sau thực phân hoạch, dãy ban đầu phân thành đoạn: CẤU TRÚC DỮ LIỆU GIẢI THUẬT • ak ≤ x , với k = j • ak = x , với k = j+1 i-1 • ak ≥ x , với k = i N CẤU TRÚC DỮ LIỆU GIẢI THUẬT Quick Sort – Ý Tưởng  Đ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 CẤU TRÚC DỮ LIỆU GIẢI THUẬT  Đ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 … CẤU TRÚC DỮ LIỆU GIẢI THUẬT Giải Thuật Quick Sort  IV. Quick sort Đây giả thuật xếp nhanh, tốn O(nlogn) Cài đặt giả thuật tương đối phức tạp Chúng ta cần ý đến: Pivot: ta gọi chốt  Partition: Gọi điểm phân hoạch  Đối với giải thauật này, xem mảng phần tử hay mảng có tất phần tử giống mảng có thứ tự Ta chi mảng thành mảng con: Trái phải Sắp xếp mảng con, mảng phần tử Nếu mảng Trái có thứ tự mảng phải có thứ tự mảng mảng có thứ tự CẤU TRÚC DỮ LIỆU GIẢI THUẬT A = {59, 31, 12, 33, 27, 97, 91, 19, 18, 63 } Bước 1: Tìm chốt: Chốt phần tử lớn phần tử khác mảng Nếu mảng có phần tử tất phần tử khơng có chốt: Chốt mảng la 59 (vị trí 0) VD:  + 1, 1, 5, 3, -> chốt + 5, 5, 5, 3, 1, 2, -> chốt + -> khơng có chốt + 7, 7, 7, -> khơng có chốt CẤU TRÚC DỮ LIỆU GIẢI THUẬT  Bước 2: Tìm điểm phân hoạch:  + Dùng cờ: L (trái) R (Phải) + L chạy từ trái qua, dừng lại gặp phần tử >= pivot + R chạy từ phải qua, dừng lại gặp phần tử < pivot + Tại điểm dùng: Nếu L < R : Chúng ta swap A[L] A[R] + Dừng lại L > R + Partition L Đây số mảng bên phải CẤU TRÚC DỮ LIỆU GIẢI THUẬT  VD: với mảng A = {59, 31, 12, 33, 27, 97, 91, 19, 18, 63 } PivotLey = 59 L = 0, R = 9: b1 L dừng lại vị trí 0: A[L] >= pivot, R dừng lại vị trí 8, A[R] = 18 < pivot Swap: 18, 31, 12, 33, 27, 97, 91, 19, 59, 63  b2, tiếp tục L > R Bước 3: Lặp lại (Dùng đệ qui) Giải Thuật Quick Sort  Bước 1: Nếu left ≥ right //dãy có phần tử Kết thúc; //dãy xếp CẤU TRÚC DỮ LIỆU GIẢI THUẬT  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 Giải Thuật Quick Sort  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; CẤU TRÚC DỮ LIỆU GIẢI THUẬT  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: Lặp lại Bước Ngược lại: Dừng 10 Quick Sort – Ví Dụ CẤU TRÚC DỮ LIỆU GIẢI THUẬT  Cho dãy số a: 12 Phân hoạch đoạn l =0, r = 7: 12 l=0 15 x = a[3] = 15 r=7 11 Quick Sort – Ví Dụ i=0 j=6 CẤU TRÚC DỮ LIỆU GIẢI THUẬT l=0 l=0 12 i=1 i=2 12 12 j=3 j=4 j=5 15 r=7 15 r=7 Quick Sort – Ví Dụ CẤU TRÚC DỮ LIỆU GIẢI THUẬT  Phân hoạch đoạn l = 0, r = 2: l=0 i=0 r =3 j=2 13 12 15 Quick Sort – Ví Dụ  Phân hoạch đoạn l =4, r = 7: CẤU TRÚC DỮ LIỆU GIẢI THUẬT 1 l=4 i=4 i=4 l=4 14 12 15 r =7 j=6 j=6 j=7 12 15 r =7 Quick Sort – Ví Dụ CẤU TRÚC DỮ LIỆU GIẢI THUẬT  Phân hoạch đoạn l =6, r = 7: 15 12 15 CẤU TRÚC DỮ LIỆU GIẢI THUẬT Quick Sort void QuickSort(int a[], int left, int right) { int i, j, x; x = a[(left+right)/2]; i = left; j = right; { while(a[i] < x) i++; while(a[j] > x) j ; if(i

Ngày đăng: 16/05/2018, 19:52

TỪ KHÓA LIÊN QUAN

w