选择排序、选择排序、选择排序、选择排序、选择排序、选择排序,python实现的选择排序。

运行环境 Runtime environment

1
2
3
操作系统: Windos10  
IDE: JetBrains Python 2018.2.4 x64
语言: Python 3.66

背景

选择排序,要理解首先得明白什么玩意是数组、什么玩意是链表以及大O表示法~
不知道先去百度一下,网上大把多,不解释了。
说真的,面试的时候真的会有面试官问我选择排序吗?不一般都是问快排和冒排么?emmmm….

选择排序实现

为了方便理解,拆分成两个函数来表示,手动实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def find_min(tempArray):
tempMin = tempArray[0] # 用来存最小值的
tempMinIndex = 0 # 用来存最小值的下标(索引)
print('旧列表:%s'%tempArray)
for i in range(1,len(tempArray)): # 遍历除索引0以外的
if tempArray[i] < tempMin:
tempMin = tempArray[i]
tempMinIndex = i

return tempMinIndex

def selection_sort(tempArray):
'''
选择排序
:param tempArray: 需要排列的数组
:return:
'''
newArray = []
for i in range(len(tempArray)):
tempMin = find_min(tempArray) # 选择数组中最小的元素,并加入新数组
newArray.append(tempArray.pop(tempMin))
print('新列表:%s'%newArray)

return newArray

if __name__ == '__main__':
print('排序完成:%s'%selection_sort([5,7,2,8,2,9,3,6,4,0]))

运行结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
旧列表:[5, 7, 2, 8, 2, 9, 3, 6, 4, 0]
新列表:[0]
旧列表:[5, 7, 2, 8, 2, 9, 3, 6, 4]
新列表:[0, 2]
旧列表:[5, 7, 8, 2, 9, 3, 6, 4]
新列表:[0, 2, 2]
旧列表:[5, 7, 8, 9, 3, 6, 4]
新列表:[0, 2, 2, 3]
旧列表:[5, 7, 8, 9, 6, 4]
新列表:[0, 2, 2, 3, 4]
旧列表:[5, 7, 8, 9, 6]
新列表:[0, 2, 2, 3, 4, 5]
旧列表:[7, 8, 9, 6]
新列表:[0, 2, 2, 3, 4, 5, 6]
旧列表:[7, 8, 9]
新列表:[0, 2, 2, 3, 4, 5, 6, 7]
旧列表:[8, 9]
新列表:[0, 2, 2, 3, 4, 5, 6, 7, 8]
旧列表:[9]
新列表:[0, 2, 2, 3, 4, 5, 6, 7, 8, 9]
排序完成:[0, 2, 2, 3, 4, 5, 6, 7, 8, 9]

总结

排序算法里,选择排序比较灵巧,但是算是速度挺垫底的。
总之,比直接一遍遍的遍历这个列表来排序要快得多。
如果配合上python自带的max和min方法会方便很多2333,但是那样就没意义了。