22计算机408考研—数据结构— 简单选择排序

180 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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";
    }
}

运行结果如下: 在这里插入图片描述