基本思想:选择排序是一种简单直观的排序算法。它首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾,以此类推,直到所有元素均排序完毕。
算法分析:
选择排序和冒泡排序十分相似,但是值得注意的是选择排序只有一轮比较完后,找出最小(大)的,才交换位置,每轮只交换一次;而冒泡排序每比较一次可能就要交换一次,每轮有多次交换。选择排序交换次数比冒泡排序少,就减少了CPU的消耗,所以在数量小的时候可以用选择排序。选择排序实际适用场合非常少。
稳定性:因为存在任意位置的两个元素交换,比如第一个5会和2交换位置,所以改变了两个5原本的相对顺序,因此是不稳定排序。
比较性:因为排序时元素之间需要比较,因此是比较排序。
时间复杂度 | 空间复杂度 |
---|---|
因为需要双层循环,因此平均时间复杂度为 | 只需要常数个辅助单元,所以空间复杂度为(该空间复杂度的排序又称为原地排序(in-place)) |
def SelectionSort(arr):
for i in range(len(arr)):
min_dix = i
for j in range(i+1,len(arr)):
if arr[min_dix] > arr[j]:
min_dix = j
arr[min_dix],arr[i] = arr[i],arr[min_dix]