Python实现经典排序算法-选择排序
2019-04-01 11:26
295 查看
直接选择排序(Straight Select Sort)
1.选择排序概述
选择排序(Selection sort) 是一种简单直观的排序算法,它的工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
2.基本思想
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果
算法分析:
- 关键字比较次数
在第i趟排序中选出最小关键字的记录,需要做n-i次比较,因此总的比较次数为n(n-1)/2=o(n^2) - 记录移动次数
初始文件为正序时,移动次数为0
文件初态为反序时,每趟排序均要执行交换操作,总的移动次数最大值为3(n-1)
平均时间复杂度为 O(n^2) - 稳定性:不稳定
3.python实现
# 选择排序算法模型: # 3,1,2,5,6 # 31256 > 31256 > 31256 > 31256 > 1 3256 第一回合先找出 # 13256 > 13256 > 13256 > 12 356 第二回合 # 12356 > 12356 > 123 56 第三回合 # 12356 > 1235 6 第四回合 # 12356 第五回合 # ①从左往右,找最小值 list1 = [3, 1, 5, 2, 7, 991, 189, 19, 16, 2, 1, 5] def select(list1): for i in range(len(list1)): # 从左到右,总共发生len(list1)次循环 # num_min = list1[i] location = i # 默认设置i处为最小值 for j in range(i, len(list1)-1): if list1[location] > list1[j+1]: # 如果默认最小位置处的数大于j+1处的数,则j+1为最小数 location = j + 1 else: # 如果最小数 < list1[j+1],则continue continue mid = list1[location] # 第i次循环,找到最小数,然后和i处的数进行交换 list1[location] = list1[i] list1[i] = mid return list1 print(select(list1))
下面是上面的变种,从右往左,每次找出最大值,放在每次循环开始的"起始位置"
# 3,1,2,5,6 # 31256 > 31256 > 31256 > 31256 > 3125 6 第一回合 # 31256 > 31256 > 31256 > 312 56 第二回合 # 31256 > 31256 > 12 3456 第三回合 # 12356 > 1 2356 第四回合 # 12356 第五回合 # ②从右往左,找最大值 list2 = [25,2,5,3,1] def select1(list2): for i in range(len(list2)-1,-1,-1): location = i for j in range(i-1,-1,-1): if list2[location] < list2[j]: location = j else: continue list2[location], list2[i] = list2[i], list2[location] return list2 print(select1(list2))
以上代码在python3.7.3环境下测试通过
相关文章推荐
- 用Python实现八大排序算法--直接选择排序
- 排序算法(三)冒泡、选择排序的Python实现及算法优化详解 推荐
- python 实现排序算法(三)-选择排序和冒泡排序
- 排序算法(C++/JS/PYTHON/GO/JAVA/PHP实现)--选择排序(二)
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 《面试》 几种经典的简单的排序方法(冒泡,选择,插入)python实现
- 排序算法的C++ && Python实现---选择排序
- 用JavaScript实现十大经典排序算法--选择排序
- python排序算法实现——(二)选择排序
- python实现2种简单的排序算法--冒泡排序和选择排序
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 八大排序算法的python 实现(插入排序、选择排序)
- python实现插入排序和选择排序
- 史上最简单!冒泡、选择排序的Python实现及算法优化详解
- 插入排序,选择排序,冒泡排序等常用排序算法(java实现)
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
- 【排序算法】选择排序原理及Java实现
- Python实现冒泡排序,选择排序,插入排序