当前位置:网站首页>选择排序(Selection Sort)
选择排序(Selection Sort)
2022-08-05 21:58:00 【DeeGLMath】
选择排序(Selection Sort)
一、基本思想
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
二、实现逻辑
n n n 个记录的数组可经过 n − 1 n-1 n−1 轮选择排序得到有序结果。
算法步骤:
- 初始状态:无序区为 R [ 1... n ] R[1...n] R[1...n],有序区为空;
- 第 i i i 轮排序( i = 1 , 2 , 3 , . . . , n − 1 i=1,2,3,...,n-1 i=1,2,3,...,n−1)开始时,当前有序区和无序区分别为 R [ 1... i − 1 ] R[1...i-1] R[1...i−1] 和 R [ i . . . n ] R[i...n] R[i...n]。该轮排序从当前无序区中选出关键字最小的记录 R [ k ] R[k] R[k],将它与无序区的第 1 个记录 R [ i ] R[i] R[i] 交换,使 R [ i ] R[i] R[i] 和 R [ i + 1... n ] R[i+1...n] R[i+1...n] 分别变为记录个数增加 1 个的新有序区和记录个数减少 1 个的新无序区;
- n − 1 n-1 n−1 轮结束后,数组已经有序化。
三、时间复杂度的分析
表现最稳定的排序算法之一,任何数据在算法中都是 Θ ( n 2 ) \Theta(n^2) Θ(n2)、 Ω ( n 2 ) \Omega(n^2) Ω(n2)、 O ( n 2 ) O(n^2) O(n2)。
四、空间复杂度的分析
不占用额外空间,故算法空间复杂度为: O ( n 2 ) O(n^2) O(n2)。
五、算法实现
普通版本
def selection_sort(array: List) -> None:
''' 支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。 '''
length = len(array)
for index in range(length - 1):
mind = index # 标记最小关键字位置
for next in range(index + 1, length): # 搜索
if array[mind] > array[next]:
mind = next
array[index], array[mind] = array[mind], array[index]
标记最大值
def selection_sort(array: List) -> None:
''' 支持数值型数据,如整型与浮点型混合;支持全为字符串类型的数据;不支持字符串型与数值型混合。 '''
length = len(array)
scope = length // 2
for index in range(scope):
mind, maxd = index, index # 从一个方向搜索来保证单调性
for next in range(index + 1, length - index):
if array[mind] > array[next]:
mind = next
if array[maxd] < array[next]:
maxd = next
array[mind], array[index] = array[index], array[mind]
maxd = mind if index == maxd else maxd
array[maxd], array[length - index - 1] = array[length - index - 1], array[maxd]
边栏推荐
- Digital twins remove the "blind spots" of smart cities and empower the digital development of society
- Affected by the epidemic, many provincial examination interviews in Henan have been postponed
- CFdiv2-Chip Move-(线性dp+状态枚举方式)
- 乱花渐欲迷人眼?这几招教你正确挑选适合自己的建模软件
- [21天学习挑战赛]选择排序
- mysql- 忘记root密码怎么办?mysql密码破解
- office2019激活
- 杭电多校-Shinobu loves trip-(预处理+同余定理)
- 中国石油大学(北京)-《 油层物理》第二阶段在线作业
- redis宕机导致数据丢失的重大生产事故总结
猜你喜欢
随机推荐
Affected by the epidemic, many provincial examination interviews in Henan have been postponed
uni开发微信小程序使用camera遇到的问题
CFdiv2-Chip Move-(线性dp+状态枚举方式)
Boost搜索引擎
Win10怎么打开msixbundle安装包
中国石油大学(北京)-《油藏工程》第一阶段在线作业
ESP8266-Arduino编程实例-红外寻迹传感器驱动
【树莓派】初始化系统环境安装
LSN、Checkpoint?MySQL的崩溃恢复是怎么做的?
哪个券商平台开户佣金低又安全又可靠
dart learning record - Updating
mvcc机制中的快照读和当前读
tcping的安装及使用
以不得第动心为耻
网页提示此站点不安全,还能打开吗?
PyCharm更新上传文件到服务器
Fedora 团队宣布 Fedora 36 系统发布了
【实战系列】16位唯一id设计方案
传感器CE测试认证检测要求
精益生产之MES制造执行系统









