排序算法 -- 选择排序
来源:互联网 发布:淘宝店装饰教程 编辑:程序博客网 时间:2024/06/07 21:24
一. 选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
二. 原理
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
如下图所示对数列 5 10 3 9 10 6 20 进行排序
三. 代码实现
#includeusing namespace std;void selectSort(int *arr, int len){ if(arr == NULL || len <= 0) { return ; } for(int i=0; i 三. 时间复杂度和空间复杂度及稳定性
1. 时间复杂度
从代码层面上看两层for循环,从原理上看,不管原序列是否有序,对于第i个位置元素的放置,都需要遍历n-i+1个数据,寻找这些数据中最大或最小的数据,所以选择排序的时间复杂度约为O(n*n)。
2. 空间复杂度
无论是从代码层面上还是理论层面上看除了使用局部的临时变量外,没有额外开辟空间,所以空间复杂度为O(1)。
3. 稳定性
从上面的例子中可以看出两个10在拍完序后交换了顺序,从理论上讲,选择排序过程中会有间隔的数据交换,所以不稳定。
阅读全文
0 0
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法--选择排序
- 排序算法---选择排序
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法---选择排序
- 排序算法--选择排序
- 排序算法--选择排序
- 排序算法--选择排序
- 排序算法--选择排序
- 算法-排序-选择排序
- 排序算法:选择排序
- 排序算法---选择排序
- 排序算法:选择排序
- 排序算法--选择排序
- 算法排序 -- 选择排序
- IO流
- Jin(CMake方式)
- java学习随笔——queue
- Kotlin 在控制台下的编译和运行
- C++11初探:类型推导,auto和decltype
- 排序算法 -- 选择排序
- 人工智能开源框架
- 集合
- 第几天?
- C++内存申请、实例化的方式
- 第4周项目6- 多项式求和
- company管理系统
- Java基础
- eclipse中配置tomcat服务器和端口被占用问题的解决