Sắp xếp chọn là một thuật toán sắp xếp đơn giản, dựa trên việc so sánh tại chỗ.
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 tiên của dãy hiện hành. Sau đó không quan tâm đến nó nữa, 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 một phần tử. Dãy ban đầu có n phần tử, vậy tóm tắt ý tưởng thuật toán là thực hiện n-1 lượt việc đưa phần tử nhỏ nhất trong dãy hiện hành về vị trí đúng ở đầu dãy.
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;
}
}
}
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) {
a[max] ^= a[i];
a[i] ^= a[max];
a[max] ^= a[i];
}
}
}