Giải thuật sắp xếp (Sorting)

Một phần của tài liệu giáo trình tin học đại cương (Trang 98 - 100)

- Mô hình Internet Mail: Là mô hình liên kết cách ộp thư lưu trên Internet, mỗi hộp thư

5. Giải thuật sắp xếp (Sorting)

Sắp xếp là một trong số yêu cầu thường xuyên xuất hiện trong quá trình xử lý số liệu. Bản chất của thuật giải sắp xếp là bố trắ lại vị trắ của số liệu theo thứ tự tăng dần hoặc giảm dần. Có nhiều giải thuật sắp xếp trong tin học, trong giáo trình này chúng ta sẽựề cập ựến một số thuật giải ựơn giản ựó là sắp xếp lựa chọn (selection sort), sắp xếp chèn (insertion sort) và sắp xếp nổi bọt (bubble sort). đểựơn giản giả sử yêu cầu của bài toán là: Sắp xếp một dãy số

cho trước a1, a2, ..., an theo thứ tự tăng dần.

5.1 Sp xếp la chn (selection sort)

Thuật giải chọn ựược diễn tả như sau: Tìm phần tử nhỏ nhất trong dãy số và hoán vị nó với phần tửựầu tiên, tìm phần tử nhỏ nhất kế tiếp và hoán vị nó với phần tử thứ hai. Tiếp tục quá trình này ựến khi toàn bộ dãy sốựược sắp xếp.

procedure Selection_Sort;

begin

for i:=1 to n-1 do begin

m:=i

for j:=i+1 to n do if aj<am then m:=j if m≠i thenựổi chỗ ai và am end end Vắ dụ Dãy số ban ựầu : 3 6 -2 7 5 i=1 -2 6 3 7 5 i=2 -2 3 6 7 5 i=3 -2 3 5 7 6 i=4 -2 3 5 6 7 5.2 Sp xếp chèn (insertion sort)

Thuật giải chèn ựược diễn tả như sau: Xét lần lượt từng phần tử và chèn vào vị trắ thắch hợp của phần tử ựó trong số các phần tử ựã xét trước ựó. Cụ thể giả sử ựã có (i-1) phần tử ựược sắp xếp ựúng vị trắ, ựể chèn phần tử thư i vào ựúng vị trắ ta so sánh lần lượt với các phần tử thứ (i-1), (i-2),... khi tìm ựược vị trắ ựúng thì chèn phần tử thứ i ựó vào.

procedure Insertion_Sort begin for i:=2 to n do begin k:=ai j:=i

while aj-1>k do begin aj:=aj-1, j:=j-1 end

aj:=k end end Vắ dụ Dãy số ban ựầu : 3 6 -2 7 5 i=2 3 6 -2 7 5 i=3 -2 3 6 7 5 i=4 -2 3 6 7 5 i=5 -2 3 5 6 7 5.3 Sp xếp ni bt (bubble sort)

Thuật giải này còn có tên gọi khác là sắp xếp bằng cách ựổi chỗ trực tiếp (exchange sort), thuật giải nổi bọt ựược diễn tả như sau: Duyệt dãy số theo thứ tự từ phải sang trái nếu hai phần tử kề cận ngược thứ tự thì ựổi chỗ cho nhau. Như vậy sau lượt duyệt ựầu tiên phần tử ựầu tiên sẽ là phần tử nhỏ nhất, sau lượt thứ hai phần tử nhỏ thứ hai ựược chuyển lên vị trắ thứ

hai...cứ như vậy dãy số sẽựược sắp xếp tăng dần.

procedure Bubble_Sort

begin

for i:=1 to n-1 do

for j:=n downto i+1 do

if aj<aj-1 thenựổi chỗ aj và aj-1

end Vắ dụ Dãy số ban ựầu : 3 6 -2 7 5 i=1 -2 3 6 5 7 i=2 -2 3 5 6 7 i=3 -2 3 5 6 7 i=4 -2 3 5 6 7 6. Gii thut tìm kiếm (Searching)

Cùng với các thuật giải sắp xếp, các thuật giải tìm kiếm cũng ựóng một vai trò quan trọng trong khi xủ lắ số liệu. Bài toán tìm kiếm ựặt ra như sau: Giả sủ ta có một dãy số a1, a2,...., an, ta phải tìm vị trắ của phần tử có giá trị bằng giá trị X cho trước. Chúng ta sẽ xét hai thuật giải tìm kiếm ựó là tìm kiếm tuần tự (sequential searching) và tìm kiếm nhị phân (binary searching).

6.1 Tìm kiếm tun t (sequential searching)

đây là thuật giải tìm kiếm ựơn giản nhất, ta sẽ duyệt tuần tự dãy số, thuật giải sẽ kết thúc khi tìm thấy phần tử bằng giá trị X hoặc khi duyệt hết dãy số nhưng không có phần tử

nào có giá trị là X

procedure Sequential_Searching

begin

i:=1

while ai≠ X do i:=i+1

if i=n+1 then không có phần tử cần tìm else vị trắ phần tử cần tìm là i

end

6.2 Tìm kiếm nh phân (binary searching)

Giả sử dãy số ựã ựược sắp xếp tăng dần a1≤a2≤...≤an (trường hợp sắp xếp giảm dần thì tương tự), thuật giải nhị phân gần giống như khi ta tìm một từ trong từ ựiển. để tìm phần tử

bằng X trước tiên ta so sánh nó với phần tửở vị trắ giữa của dãy số nếu X nhỏ hơn thì X chỉ

có thểở trong một nửa trước của dãy nếu ngược lại thì X chỉ có thểở trong nủa sau của dãy. Lặp lại quá trình tìm kiếm ựó ựến khi tìm thấy hoặc dãy số trở nên rỗng (không tìm thấy).

procedure Binary_Searching

begin

left:=1 right:=n

repeat

mid:=[(left+right)/2] (*Kắ hiệu [a] nghĩa là lấy phần nguyên của số thực a*) if X<amid then right:=mid-1

else left:=mid+1

until (X=amid) or(left>right)

if X=amid then vị trắ cần tìm là mid else không có phần tử cần tìm

end

Vắ d: Tìm phần tử 28 trong dãy số sau

[4 15 28 33 67 99 103] Lặp lần 1 [4 15 28]

Lặp lần 2 [28]

Một phần của tài liệu giáo trình tin học đại cương (Trang 98 - 100)

Tải bản đầy đủ (PDF)

(182 trang)