选择排序

10 分钟

另一种排队法。每一轮从还没排好的同学里,一眼挑出最矮的,请他站到最前面的空位。挑一个放一个,队伍从前往后一点点排好。

#include <iostream>
using namespace std;
int main() {
    int a[5] = {5, 3, 4, 1, 2}, n = 5;
    for (int i = 0; i < n - 1; i++) {
        int k = i;                        // 先假定 i 位置最小
        for (int j = i + 1; j < n; j++)
            if (a[j] < a[k]) k = j;       // 找到真正最小的编号
        int t = a[i]; a[i] = a[k]; a[k] = t; // 把它换到前面
    }
    for (int i = 0; i < n; i++) cout << a[i] << " ";
    return 0;
}

选择排序每一轮只在最后交换一次,比冒泡换得少。要点是内层只负责记住最小值的编号 k,别一边比一边换。

小纸条

选择排序每轮交换几次?

登录 后可看答案

选择排序 · C++ 入门 · op599 课程