选择排序,将待排序数列分为有序区和无序区,然后依次从无序区中选择最小的元素放到有序区的后面。
设数组为a[0, 1, ..., n-2, n-1],
- 初始时,数组为无序,i=0;
- 从a[i+1, ..., n-1]中选择最小的元素与a[i]交换,交换后,a[0, 1, ..., i]就是一个有序区
- i++后,重复第二步,直到i=n-1,完成排序
代码实现如下
void selectSort(int a[], int n)
{
int i, j, minIndex;
for (i = 0; i < n; i++)
{
minIndex = i; // 记录最小元素的位置
for (j = i + 1; j < n; j++)
{
if (a[j] < a[minIndex])
minIndex = j;
}
if (minIndex != i)
Swap(a[i], a[minIndex]);
}
}