问题
排序 [30, 24, 5, 58, 18, 36, 12, 42, 39]
选择排序
选择排序每次从待排序序列中选出最小(或最大)的元素,将其放到序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
图解
- 第一轮循环,遍历数组,从中选出最小的元素,和起始位置元素进行交换
- 第二轮循环,遍历剩余未排序元素,从中继续寻找最小的元素,将其放到已排序的序列末尾
- 继续循环遍历,直到排序完成
代码
def selection_sort(nums):
n = len(nums)
for i in range(n):
min_index = i
for j in range(i+1, n):
if nums[j] < nums[min_index]:
min_index = j
nums[i], nums[min_index] = nums[min_index], nums[i]
return nums
时间复杂度
选择排序的时间复杂度为 O(n2)