多一些Aha Time,发现技术的美妙🍺|

啊原来是这样呀

园龄:8年3个月粉丝:3关注:9

【算法基础】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 }
View Code
复制代码

 

总结提炼

时间复杂度为 O(n^2)

空间复杂度为O(1)

选择排序算法是一种不稳定排序算法,当出现相同元素的时候有可能会改变相同元素的顺序

 

 

拓展方向

 暂无

本文作者:OhOfCourse

本文链接:https://www.cnblogs.com/OhOfCourse/p/16916062.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   啊原来是这样呀  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起