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ề công nghệ thông tin cao đẳng) (Trang 41 - 42)

- Trình bày được khái niệm bài toán sắp xếp;

- Mô phỏng được giải thuật, cách cài đặt, cách đánh giá giải thuật của một số phương pháp sắp xếp cơ bản;

- 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. - Thực hiện các thao tác an toàn với máy tính.

Nội dung chính:

1.Định nghĩa bài toán sắp xếp

Mục tiêu: Trình bày được định nghĩa bài toán sắp xếp.

Sắp xếp là một quá trình xử lý bố trí lại một danh sách các đối tượng theo thứ tự nào đó.

Ví dụ ta cần sắp xếp danh sách thí sinh theo tên với thứ tự Alphabet, hoặc sắp xếp danh sách sinh viên theo điểm trung bình với thứ tự từ cao đến thấp.

Nhìn chung có rất nhiều xử lý dữ liệu cần đến việc sắp xếp dữ liệu theo một trật tự nào đó. Ví dụ như khi cần tìm kiếm một đối tượng trong một danh sách các đối tượng bằng giải thuật tìm kiếm nhị phân thì danh sách các đối tượng này phải được sắp xếp trước đó.

Các đối tượng cần được sắp xếp thường có nhiều thuộc tính chúng ta cần chọn một thuộc tính làm khóa và sắp xếp theo khóa này.

2. Phương pháp chọn (Selection sort)Mục tiêu: 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.Gii thiu 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.Gii thut

Ðâ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í.

Procedure SelectionSort; 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 ha

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ề công nghệ thông tin cao đẳng) (Trang 41 - 42)

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

(53 trang)