Lặp lại quá trình trên cho đến khi dãy chưa Lặp lại quá trình trên cho đến khi dãy chưa

Một phần của tài liệu Thuật toán (Trang 67 - 71)

sắp rỗng.

sắp rỗng.

Vấn đề đặt ra là: Dãy đã sắp đặt ở đâu?

Vấn đề đặt ra là: Dãy đã sắp đặt ở đâu?

Nếu quyết định đặt dãy đã sắp ở tại vị trí của

Nếu quyết định đặt dãy đã sắp ở tại vị trí của

dãy ban đầu => Đổi chổ phần tử nhỏ nhất

dãy ban đầu => Đổi chổ phần tử nhỏ nhất

với phần tử hiện dang ở vị trí đó.

Ta có bước mô tả tiếp theo của thuật toán:

Ta có bước mô tả tiếp theo của thuật toán:

Với mỗi i=1,...,nVới mỗi i=1,...,n

+ Tìm phần tử nhỏ nhất a

+ Tìm phần tử nhỏ nhất ajj trong dãy con a trong dãy con aii,...,a,...,ann..

+ Đổi chỗ a

+ Đổi chỗ aii và a và ajj cho nhau cho nhau

Nếu định hướng chương trình vào ngôn ngữ Pascal,

Nếu định hướng chương trình vào ngôn ngữ Pascal,

ta có:

ta có:

For i:=1 to n do

For i:=1 to n do

+ Tìm phần tử nhỏ nhất a

+ Tìm phần tử nhỏ nhất ajj trong dãy con a trong dãy con aii,...,a,...,ann..

+ Đổi chổ a

+ Đổi chổ aii và a và ajj cho nhau. cho nhau.

Đến đây ta còn 2 bài toán con cần giải quyết:

Đến đây ta còn 2 bài toán con cần giải quyết:

(1) Tìm phần tử nhỏ nhất a

(1) Tìm phần tử nhỏ nhất ajj trong dãy con a trong dãy con aii,...,a,...,ann.. (adsbygoogle = window.adsbygoogle || []).push({});

(2) Đổi chổ a

Đối với bài toán con (1), có thể giải quyết như sau:

Đối với bài toán con (1), có thể giải quyết như sau:

- Coi ai là phần tử nhở nhất của dãy con aCoi ai là phần tử nhở nhất của dãy con aii,...,a,...,ann..

- Lần lượt so sánh giá trị nhỏ nhất đó với aLần lượt so sánh giá trị nhỏ nhất đó với ai+1i+1, ...,a, ...,ann, ,

nếu gặp phần tử nhỏ hơn thì coi nó là phần tử

nếu gặp phần tử nhỏ hơn thì coi nó là phần tử

nhở nhất mới

nhở nhất mới

- Sau khi so sánh với n, ta thu được phần tử nhỏ Sau khi so sánh với n, ta thu được phần tử nhỏ

nhất. nhất. J:=i; J:=i; For k:=j+1 to n do For k:=j+1 to n do if a

if akk<a<ajj then j:=k; then j:=k;

Đối với bài toán con (2), để đổi chỗ ta có thể sử dụng

Đối với bài toán con (2), để đổi chỗ ta có thể sử dụng

biến trung gian TG.

biến trung gian TG.

tg:=a

Như vậy ta có thuật toán sắp xếp sau:

Như vậy ta có thuật toán sắp xếp sau:

For i:=1 to n doFor i:=1 to n do For i:=1 to n do Begin Begin J:=i; J:=i; For k:=j+1 to n do For k:=j+1 to n do if a

if akk<a<ajj then j:=k; then j:=k;

tg:=a

tg:=aii; a; aii:=a:=ajj; a; ajj:=tg;:=tg;

End;

Chia để trị và đệ quy Chia để trị và đệ quy

Chiến lược thiết kế thuật toán chia để trị nhiều khi được găn liện với đệ quy. Chiến lược thiết kế thuật toán chia để trị nhiều khi được găn liện với đệ quy. Để giải quyết bài toán đưa ra, chúng chia bài toán ra thành một số bài Để giải quyết bài toán đưa ra, chúng chia bài toán ra thành một số bài toán con tương tự với bài toán gốc nhưng với kích thước nhỏ hơn, giải toán con tương tự với bài toán gốc nhưng với kích thước nhỏ hơn, giải quyết đệ quy các bài toán con, và sau đó kết hợp các lời giải đó để quyết đệ quy các bài toán con, và sau đó kết hợp các lời giải đó để tạo ra lời giải cho bài toán gốc.

tạo ra lời giải cho bài toán gốc.

Kiểu chia và trị bao gồm 3 bước cho mỗi mức đệ quy: Kiểu chia và trị bao gồm 3 bước cho mỗi mức đệ quy:

Một phần của tài liệu Thuật toán (Trang 67 - 71)