选择排序的规则是让第 i 个元素分别于后边的元素进行比较,记录最小的元素的位置,遍历完成之后,进行交换。将数组中每一个元素进行处理后最终得出有序的数据。其交换步骤图如下(摘自 传智播客 教师课件):

2015-06-07_224448

【实现代码】

void select_sort(int* arr, int len)
{
// 选择排序
int swap;
// 外循环,i 的长度要小于总长度 - 1,最后一个值剩下的值一定是最大的
for (int i = 0; i < len - 1; i++)
{
// swap,用来记录最小值的下标,初始化让其等于 i
swap = i;
for (int j = i + 1; j < len; j++)
{
// 判断 j 下标的值是否小于 swap 下标的值
if (arr[j] < arr[swap])
// 如果小于则让 swap 重新记录当前最小下标 j 的值
swap = j;
}

// 如果 swap 与 i 相等证明位置没有移动过,所以不需要交换数据,否则交换
if (swap != i)
{
arr[i] = arr[i] ^ arr[swap];
arr[swap] = arr[i] ^ arr[swap];
arr[i] = arr[i] ^ arr[swap];
}
}
}