Phương pháp chọn (Selection sort)

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (nghề lập trình viên máy tính cao đẳng) (Trang 40 - 41)

Mục tiêu:

- Mô phỏng được giải thuật, cách cài đặt của phương pháp sắp xếp chọn trực tiếp; - Giải được các bài toán sắp xếp sử dụng các phương pháp sắp xếp đã khảo sát.

2.1.Giới thiệu phương pháp

Ta thấy rằng, nếu danh sách có thứ tự, phần tử ai luôn là min(ai, ai+1, ., an-1). Ý tưởng của thuật toán chọn trực tiếp mô phỏng một trong những cách sắp xếp tự nhiên nhất trong thực tế: chọn phần tử nhỏ nhất trong N phần tử ban đầu, đưa phần tử này về vị trí đúng là đầu dãy hiện hành; sau đó, xem dãy hiện hành chỉ còn N-1 phần tử của dãy ban đầu, bắt đầu từ vị trí thứ 2; lặp lại quá trình trên cho dãy hiện hành... đến khi dãy hiện hành chỉ còn 1 phần tử.

2.2.Giải thuật

Ðây là phương pháp sắp xếp đơn giản nhất được thực hiện như sau:

Bước 1: i = 1;

Bước 2: Tìm phần tử a[min] nhỏ nhất trong dãy hiện hành từ a[i] đến a[N] Bước 3 : Hoán vị a[min] và a[i]

Bước 4 : Nếu i ≤ N-1 thì i = i+1; Lặp lại Bước 2 Ngược lại: Dừng. //N-1 phần tử đã nằm đúng vị trí.

Cài đặt thuật toán:

Var pos,min,i,j:Integer; Begin for i:=1 to n-1 do Begin min:=a[i]; pos:=i; {lưu lại vị trí phần tử nhỏ nhất} for j:=i to n do Begin if(a[j]<min) then Begin min:=a[j]; pos:=j; End;

End; {of for j}

DoiCho(i,Pos) ;

End;{of for i} End;

2.3.Ví dụ minh họa

Sắp xếp dãy gồm 10 mẩu tin có khóa là các số nguyên: 5, 6, 2, 2, 10, 12, 9, 10, 9 và 3

Bước 1: Ta chọn được phần tử có khoá nhỏ nhất (bằng 2) trong các phần tử từ a[1] đến a[10] là a[3], hoán đổi a[1] và a[3] cho nhau. Sau bước này thì a[1] có khoá nhỏ nhất là 2.

Bước 2: Ta chọn được phần tử có khoá nhỏ nhất (bằng 2) trong các phần tử từ a[2] đến a[10] là a[4], hoán đổi a[2] và a[4] cho nhau.

Tiếp tục quá trình này và sau 9 bước thì kết thúc.

Bảng sau ghi lại các giá trị khoá tương ứng với từng bước.

A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]

Ban đầu 5 6 2 2 10 12 9 10 9 3 Bước 1 2 6 5 2 10 12 9 10 9 3 Bước 2 2 5 6 10 12 9 10 9 3 Bước 3 3 6 10 12 9 10 9 5 Bước 4 5 10 12 9 10 9 6 Bước 5 6 12 9 10 9 10 Bước 6 9 12 10 9 10 Bước 7 9 10 12 10 Bước 8 10 12 10 Bước 9 10 12 Kết quả 2 2 3 5 6 9 9 10 10 12

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (nghề lập trình viên máy tính cao đẳng) (Trang 40 - 41)

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

(65 trang)