您的位置:首页 > 编程语言 > Python开发

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环境下测试通过

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: