选择排序

欢迎关注fish的公众号:fish码农成长之旅

相信大家对扑克牌并不陌生,当我们在齐牌的时候是不是会按照大小顺序进行排列,选择排序的过程就跟扑克牌差不多一样的直观简单。其排序时间复杂度总是O(n^2)的。

算法步骤#

把整个数组分为已经排序的部分和未排序的部分,初始已经排序的部分为0,未排序的部分为n(数组大小)

首先根据自己的需求在未排序数组中找到最小(大)的数放在已排序数组末端,已经排序好的大小加一,未排序数组大小减一,然后重复此步骤继续在未排序的数组中找最小(大)的数放在已排序的末端。

实例演示#

总共6个数的排序,按照从小到大排序,原始数据为:3 38 5 1 9 4

可以看出,每一次排序一个数就是遍历出最小(大)的位置,然后跟已经排序好数组的末端那个数交换位置,当遍历n次之后整个数组排序完毕。

代码实现#

Copy
template <class T> void selection_sort(std::vector<T> &arrs) { int n = arrs.size(); // 数组的大小 if (n <= 1) { // 一个数的情况不需要排序 return; } for (int idx_i = 0; idx_i < n - 1; ++idx_i) { // 为什么 n - 1:最后只剩一个数,就不需要再比较了 int target_idx = idx_i; for (int idx_j = idx_i + 1; idx_j < n; ++idx_j) { // 三目运算, 取最小值的下标赋值给 target_idx target_idx = arrs[idx_j] < arrs[target_idx] ? idx_j : target_idx; } std::swap(arrs[idx_i], arrs[target_idx]); // 交换两个位置的数 } }

posted @   xigaun  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
CONTENTS