1. Trang chủ
  2. » Công Nghệ Thông Tin

Sắp xếp dựa trên phân hoạch quicksort

15 24 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

Quicksort- ý tưởng • Ðể sắp xếp dãy a1, a2, ..., an giải thuật QuickSort dựa trên việc phân hoạch dãy ban đầu thành hai ph ần : • 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ử tùy ý trong dãy ban đầu.

Sắp xếp dựa phân hoạch quicksort Quicksort- ý tưởng • Ðể xếp dãy a1, a2, , an giải thuật QuickSort dựa việc phân hoạch dãy ban đầu thành hai phần : • Dãy 1: Gồm phần tử a1 có giá trị khơng lớn x • Dãy 2: Gồm phần tử an có giá trị khơng nhỏ 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 phần: • ak < x , với k = i • ak = x , với k = i j • ak > x , với k = j N Quicksort-ý tưởng akx j N • dãy thứ có thứ tự, • dãy có phần tử chúng có thứ tự, dãy ban đầu • Ngược lại, dãy có nhiều phần tử dãy ban đầu có thứ tự dãy 1, • Ðể xếp dãy 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 Quicksort- giải thuật Giải thuật phân hoạch dãy al, al+1, , ar thành dãy con: • 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 // a[i] ≥ x ≥ a[j] mà a[j] đứng sau a[i] Hốn vị (a[i],a[j]); • Bước : Nếu i < j: Lặp lại Bước 2.//chưa xét hết mảng Nếu i ≥ j: Dừng Quicksort- nhận xét • Về nguyên tắc, chọn giá trị mốc x phần tử tùy ý dãy, để đơn giản, dễ diễn đạt giải thuật, phần tử có vị trí thường chọn, k = (l +r)/ •  Giá trị mốc x chọn có tác động đến hiệu thực thuật tốn định số lần phân hoạch Số lần phân hoạch ta chon x phần tử median dãy Tuy nhiên chi phí xác định phần tử median cao nên thực tế người ta không chọn phần tử mà chọn phần tử nằm dãy làm mốc với hy vọng gần với giá trị median Quicksort • Giải thuật phân hoạch dãy xếp dãy al, al+1, , ar: •     Có thể phát biểu giải thuật xếp QuickSort cách đệ qui sau : • Bước : Phân hoạch dãy al ar thành dãy : • - Dãy : al aj ≤ x • - Dãy : aj+1 ai-1 = x • - Dãy : ar ≥ x • Bước :  • Nếu ( l < j )  // dãy có nhiều phần tử • Phân hoạch dãy al aj • Nếu ( i < r )  // dãy có nhiều phần tử       Phân hoạch dãy ar Quicksort –ví dụ • Sắp xếp liệu • 1,5,3,6,7,12,4,10,2,9 Phân hoạch đoạn r=0 r=9, x=a[4]=7 12 10 9 Quicksort –ví dụ Phân hoạch đoạn r=0 r=9, x=a[4]=7 7 12 10 i j L=0 R=9 12 10 7 9 Quicksort –ví dụ Phân hoạch đoạn r=0 r=9, x=a[4]=7 12 i j 10 L=0 R=9 Phân hoạch đoạn r=0 r=9, x=a[4]=7 j i 12 10 7 9 Quicksort –ví dụ 12 10 Phân hoạch đoạn r=0 r=5, x=a[2]=3 L=0 R=5 J=i R=9 L=6 j i 10 12 Quicksort –ví dụ 10 12 10 12 … Quicksort –cài đặt thuật toán Thuật toán QuickSort cài đặt đệ qui sau : void QuickSort( int l, int r) { int i,j; int x; x = a[(l+r)/2]; // chọn phần tử làm giá trị mốc i =l; j = r; { while(a[i] < x) i++; while(a[j] > x) j ; if(i

Ngày đăng: 21/05/2021, 14:09

Xem thêm:

TỪ KHÓA LIÊN QUAN

Mục lục

    Sắp xếp dựa trên phân hoạch

    Quicksort –cài đặt thuật toán

    Quicksort-đánh giá thuật toán

    Quicksort-đánh giá thuật toán

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w