选择排序的C++代码:
template<typename T>
void selectionSort(T arr[], int n) {
for (int i = 0; i < n; i++) {
//寻找[i, n)区间里的最小值
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr[i], arr[minIndex]);
}
}
在开始之前,自己根据上面的代码演算一遍。
选择排序
选择排序的总体思路:选择最小的元素放在第1位,再选择次小的元素放在第2位…
上面代码中,内层循环就是用来寻找最小元素的:
//寻找[i, n)区间里的最小值
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
每次寻找次小元素时,并不都是从索引为0的位置开始,而是承接上次外层循环中i的位置,因为i之前的元素都是已排序的。
找到次小元素之后,再将这个次小元素与i元素交换:
swap(arr[i], arr[minIndex]);