选择排序不同于二分排序,前者不要求初始序列是否有顺序。
一、过程:
1. 每一次从序列中找到最小的元素,放在新的数组或者列表的第一位;
2. 循环重复,直到所有元素都依次排序到新的数组或者列表中;
3. 所以整个过程可拆分为两个函数,第一个为找出序列中最小的元素并返回该元素的索引,第二个为选择排序完整过程;
二、代码:
# 一、找到最小元素的索引
def findSmallest(arr):
smallest = arr[0]
smallest_index = 0
for i in range(1, len(arr)): # 循环,范围为1到序列中元素个数
if arr[i] < smallest: # 如果有比初始第一个元素更小的
smallest = arr[i] # 则交换,把小的始终放在更前面
smallest_index = i # 记得索引也换成更小那个数的索引号
return smallest_index
# 二、完整选择排序
def selectSort(arr):
newArr = [] # 新的空序列,要把老序列的数一个一个添加到该序列
for i in range(len(arr)):
smallest = findSmallest(arr)
newArr.append(arr.pop(smallest))
return newArr
print(selectSort([3,1,9,5,7]))
三、输出:
[1, 3, 5, 7, 9]