选择排序
基本思想
每一趟在n-i+1(i=1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。
具体来说:假设长度为n的数组arr,要按照从小到大排序,那么先从n个数字中找到最小值min1,如果最小值min1的位置不在数组的最左端(也就是min1不等于arr[0]),则将最小值min1和arr[0]交换,接着在剩下的n-1个数字中找到最小值min2,如果最小值min2不等于arr[1],则交换这两个数字,依次类推,直到数组arr有序排列。
与插入排序的不同之处
它与插入排序的不同在于,插入排序待插入的元素不是后面所有元素的最小值;而选择排序是后面所有元素里面的最小值,然后把这两个元素进行交换,这时最小元素就排到前面来了,当前元素排到后面去了,依次循环,可以得到有序的序列。
时间复杂度 :O(n^2)
时间复杂度很高,因此使用较少
代码
# 选择排序
def selection_sort(arr):
for i in range(len(arr)-1): # 遍历第一个元素
min_index = i
for j in range(i+1, len(arr)): # 遍历第一个元素后面的所有元素,然后进行比较,如果后面存在比当前元素小的,则标记最小元素
if arr[j] < arr[min_index]:
min_index = j
if i != min_index:
# 如果最小的元素不是第一个,则第一个算术与最小元素进行交换位置
arr[min_index], arr[i] = arr[i], arr[min_index]
return arr
调用选择排序
arr = [2, 8, 1, 9, 7, 4, 3, 5, 6, 0]
print(selection_sort(arr))
输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]