MÔ PHỎNG THUẬT TOÁN

6 242 0
MÔ PHỎNG THUẬT TOÁN

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

Thông tin tài liệu

MÔ PHỎNG THUẬT TOÁN Mô phỏng một số thuật toán sắp xếp, cụ thể là Quicksort và một số thuật toán khác. Mời bạn đọc tham khảo trong bài viết để biết cụ thể hơn. Chúc các bạn đúc rút thêm kiến thức bổ ích. Thân gửi.

THUẬT TOÁN QUICKSORT: SẮP XẾP DÃY SỐ: 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 … 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 Bước : Chọn tùy ý phần tử a[k] dãy 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: Lặp lại Bước 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 ... 7, 8, 9, 10 }; cout

Ngày đăng: 17/11/2015, 14:09

Từ khóa liên quan

Mục lục

  • Giải thuật QuickSort sắp xếp dãy a1, a2 ..., aN dựa trên việc phân hoạch dãy ban đầu thành 3 phần :

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan