Khác biệt giữa bản sửa đổi của “Sắp xếp chọn”

Nội dung được xóa Nội dung được thêm vào
n Đã lùi lại sửa đổi của 14.161.6.59 (Thảo luận) quay về phiên bản cuối của Sllee1
Thẻ: Lùi tất cả
Dòng 18:
*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í.
==Ví dụ minh họa==
Ban đầu ta có mảng a với các giá trị:
<center>
{| class="prettytable"
|7||2||5||4||1||3||8||6||
|}
</center>
 
<pre>
void SapXepChon(int a[m], int n)
{
int i,imin,j,temp;
for (i=0; i<=n-2; i++)
{
imin = a[i]; //Tìm imin
for (j=i+1; j<=n-1; j++)
if (a[j] < imin)
{
imin = a[j];
//Hoán đổi a[i] và a[j]
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
</pre>
 
Ta cũng có thể cải tiến thuật toán trên để giảm bớt số lần hoán đổi hai vị trí phần tử
void selectionSort(int a[m], int n) {
//Mảng a[m] có độ dài n
for (int i = 0; i < n - 1; i++) {
int max = i;
for (int j = i + 1; j < n; j++)
if (a[max] > a[j])
max = j;
if (max != i) {
int temp = a[i];
a[i] = a[max];
a[max] = temp;
}
}
}
 
== Đánh giá ==
* Thuật toán ít phải đổi chỗ các phần tử nhất trong số các thuật toán sắp xếp(n lần hoán vị) nhưng có độ phức tạp so sánh là O(n<sup>2</sup>) (n<sup>2</sup>/2 phép so sánh).