选择排序
概述
- 内部排序
- 不稳定
- 最好最坏都是O(N2)
- 原地排序空间O(1)
思路
- 先从待排序列中找出最小(大)的元素,放到已排序列的首位
- 从待排序列中找出最小(大)的元素,追加到已排序列
- 重复2直到排序完成
实现
template<typename T> void selection_sort(vector<T>& arr) { for (int i = 0; i < arr.size() - 1; i++) { // 因为这里要i和j(i后面地每一个元素)比较,所以i<size-1而不是size int min = i; // 这里的min不是序列最小值,而是序列最小值地下标 for (int j = i + 1; j < arr.size(); j++) { if (arr[j] < arr[min]) { min = j; } } // 找到最小的元素,然后与当前元素地位置互换 swap(arr[i], arr[min]); } }
很明显,这是一个基于比较(但是基于选择而不是交换)的排序,将每个元素与它后面地序列元素一一比较,找到最小的元素并交换位置
冒泡排序是,将每一个元素与后一个元素相比较,如果大于则交换位置
两个排序都需要跑n轮(n是待排元素个数),只是选择排序减少了交换的次数
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16387451.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步