持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
2022计算机考研408—数据结构—排序 手把手教学考研大纲范围内的排序 22考研大纲数据结构要求的是C/C++,笔者以前使用的都是Java,对于C++还很欠缺, 如有什么建议或者不足欢迎大佬评论区或者私信指出
Talk is cheap. Show me the code. 理论到处都有,代码加例题自己练习才能真的学会
简单选择排序
思路:
简单选择排序,顾名思义,简单的选择一个元素排序
两层循环,第一层循环就是循环每一位
第二层循环,定义临时变量保存当前下标,循环后面每一位,
如果`找到比当前下标对应的值小的`,那么就用这个变量保存这个值小的下标,一直循环到结束
第一层循环结束后,变量保存的就是`整个数组最小的值的下标,与第一位交换`,第一位就是最小的值
如此往复,第二次循环,就从第二位开始向后找,记录除第一位最小的值的下标,循环结束后与第二位进行交换
以此类推,循环后即可完成排序。
#include <iostream>
#include <vector>
using namespace std;
void selectSort(vector<int> &num);
int main() {
int n; //n为将要输入的数组长度
cin >> n; //输入n cin方法需要上面使用std
vector<int> num; //定义vector 记得上面导入vector
int temp; //temp为输入vector时的中间变量
for (int i = 0; i < n; i++) {
cin >> temp; //输入
num.push_back(temp);
}
selectSort(num); //调用自定义的排序方法
cout << "排序后" << "\n";
for (int i = 0; i < num.size(); i++) {
cout << num[i] << " "; //输出
}
return 0;
}
void selectSort(vector<int> &num) {
for (int i = 0; i < num.size(); i++) { //循环每一位
int temp = i; //保存当前位的下标
for (int j = i + 1; j < num.size(); j++) { //循环后面每一位,找到值比当前小的就保存值小的下标
if (num[j] < num[temp]) {
temp = j;
}
}
int n = num[i]; //temp保存的是i后面最小值的下标,与下标为i的值交换
num[i] = num[temp]; //如此往复,小的值到了前面,次小的到了第二位,……
num[temp] = n;
//每次循环都把数组的变动输出出来
for (int j = 0; j < num.size(); j++) {
cout << num[j] << " ";
}
cout << "\n";
}
}
运行结果如下: