题目传送门
思路
选择排序的基本思想是:
找最小数:在未排序的部分中,找到最小的那个数。
交换位置:将这个找到的最小数与未排序部分的最开始位置上的数交换。
缩小未排序部分:之后我们就不再关心已经交换到前面的数了,因为它们已经是排好序的了。所以,我们只需要对剩下的部分继续执行上述两个步骤。
重复以上步骤,直到整个数组都被排好序。
那么代码就如下所示(附超详细代码注释):
CODE
#include <bits/stdc++.h>
using namespace std;
/* 选择排序 */
void selectionSort(vector<int> &nums) {
// 定义一个函数,接受一个整数数组作为参数
int n = nums.size(); // 获取数组的长度
// 外循环:未排序区间为 [i, n-1]
for (......) {
// 从数组的第一个元素开始,到倒数第二个元素(因为最后一个元素会在前面的步骤中被排好序)
// 初始化k为当前未排序区间的开始位置
int k = i;
// 内循环:找到未排序区间内的最小元素
for (......) {
// 从当前未排序区间的下一个元素开始,到最后一个元素
// 如果找到一个更小的数
if (......)
k = j;
// 更新k为更小数的索引
}
// 将该最小元素与未排序区间的首个元素交换
swap(nums[i], nums[k]);
// 将找到的最小数与当前未排序区间的开始位置的数交换
}
}
int main() {
int n;
cin >> n; // 输入数组的长度
vector<int>v(n);
// 创建一个长度为n的整数数组
// 读取数组中的每个元素
for (......) {
cin >> v[...];
}
// 调用选择排序函数对数组进行排序
selectionSort(v);
// 输出排序后的数组
for (......) {
cout << v[......] << " ";
}
return 0;
}
希望给你带来帮助,如果你 AC 了,请留下一个赞吧;如果没有 AC ,欢迎提问。