【算法基础】8.十大排序算法——选择排序
参考资料
选择排序https://zhuanlan.zhihu.com/p/417622677
注意上面参考资料中关于冒泡和选择排序的差异的理解并不准确。
直观理解
选定一个值作为假定极值,遍历未排序集合寻找更合适的极值,找到则取出,在一次遍历完成后将此次找到的极值追加到已排序集合之后
例子先行

1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 void SelectSort(vector<int>& arr); 6 7 int main() 8 { 9 vector<int> arr{5,4,3,2,1}; 10 int dataLen=arr.size(); 11 12 //选择排序 13 SelectSort(arr); 14 15 //输出验证 16 for(int val:arr){ 17 cout<<val<<endl; 18 } 19 20 return 0; 21 } 22 23 //默认排为升序 24 void SelectSort(vector<int>& arr){ 25 int start = 0; 26 int end = arr.size() - 1; 27 28 //遍历次数 29 int curPolarId = start; 30 for(int it = start; it < end; it++){//最后一个不必再排 31 //先取未排序集合中第1个值作为最小值基准 32 curPolarId = it; 33 34 //遍历未排序集合到最后一个元素 35 for(int cur = it; cur <= end; cur++){ 36 //未发现更极值 37 if(arr[curPolarId] <= arr[cur]){ 38 continue; 39 } 40 41 //更新索引为当前值 42 curPolarId = cur; 43 } 44 45 //将极值交换过来 46 swap(arr[it],arr[curPolarId]); 47 cout<<arr[it]<<endl; 48 } 49 }
总结提炼
时间复杂度为 O(n^2)
空间复杂度为O(1)
选择排序算法是一种不稳定排序算法,当出现相同元素的时候有可能会改变相同元素的顺序
拓展方向
暂无
本文作者:OhOfCourse
本文链接:https://www.cnblogs.com/OhOfCourse/p/16916062.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步