选择排序
约 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,别一边比一边换。
小纸条
选择排序每轮交换几次?
登录 后可看答案