Sắp xếp chọn

Một phần của tài liệu cau truc du lieu va giai thuat giaotrinh cuuduongthancong com (Trang 96 - 98)

Đây là một trong những giải thuật sắp xếp đơn giản nhất. Ý tƣởng của giải thuật nhƣ sau: Lựa chọn phần tử có giá trị nhỏ nhất, đổi chỗ cho phần tử đầu tiên. Tiếp theo, lựa chọn phần tử có giá trị nhỏ thứ nhì, đổi chỗ cho phần tử thứ 2. Quá trình tiếp tục cho tới khi toàn bộ dãy đƣợc sắp.

Ví dụ, các bƣớc thực hiện sắp xếp chọn dãy số bên dƣới nhƣ sau:

32 17 49 98 06 25 53 61

Bƣớc 1: Chọn đƣợc phần tử nhỏ nhất là 06, đổi chỗ cho 32.

06 17 49 98 32 25 53 61

Bƣớc 2: Chọn đƣợc phần tử nhỏ thứ nhì là 17, đó chính là phần tử thứ 2 nên giữ nguyên.

06 17 49 98 32 25 53 61

Bƣớc 3: Chọn đƣợc phần tử nhỏ thứ ba là 25, đổi chỗ cho 49.

Bƣớc 4: Chọn đƣợc phần tử nhỏ thứ tƣ là 32, đổi chỗ cho 98.

06 17 25 32 98 49 53 61

Bƣớc 5: Chọn đƣợc phần tử nhỏ thứ năm là 49, đổi chỗ cho 98.

06 17 25 32 49 98 53 61

Bƣớc 6: Chọn đƣợc phần tử nhỏ thứ sáu là 53, đổi chỗ cho 98.

06 17 25 32 49 53 98 61

Bƣớc 7: Chọn đƣợc phần tử nhỏ thứ bảy là 61, đổi chỗ cho 98.

06 17 25 32 49 53 61 98

Nhƣ vậy, toàn bộ dãy đã đƣợc sắp.

Giải thuật đƣợc gọi là sắp xếp chọn vì tại mỗi bƣớc, một phần tử đƣợc chọn và đổi chỗ cho phần tử ở vị trí cần thiết trong dãy.

Thủ tục thực hiện sắp xếp chọn trong C nhƣ sau:

void selection_sort(){ int i, j, k, temp; for (i = 0; i< N; i++){ k = i;

for (j = i+1; j < N; j++){ if (a[j] < a[k]) k = j; }

temp = a[i]; a[i] =a [k]; a[k] = temp; }

}

Trong thủ tục trên, vòng lặp đầu tiên duyệt từ đầu đến cuối dãy. Tại mỗi vị trí i, tiến hành duyệt tiếp từ i tới cuối dãy để chọn ra phần tử nhỏ thứ i và đổi chỗ cho phần tử ở vị trí i.

Thời gian thực hiện thuật toán tỷ lệ với N2, vì vòng lặp ngoài (biến chạy i) duyệt qua N phần tử, và vòng lặp trong duyệt trung bình N/2 phần tử. Do đó, độ phức tạp trung bình của thuật toán là O(N * N/2) = O(N2/2) = O(N2).

Một phần của tài liệu cau truc du lieu va giai thuat giaotrinh cuuduongthancong com (Trang 96 - 98)

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

(153 trang)