选择排序

排序算法 平均时间复杂度 空间复杂度 稳定性
冒泡排序 $O(n^2)$ $O(1)$ 稳定
选择排序 $O(n^2)$ $O(1)$ 不稳定
插入排序 $O(n^2)$ $O(1)$ 稳定
希尔排序 $O(n\log^2 n)$ $O(1)$ 不稳定
归并排序 $O(n\log^2 n)$ $O(n)$ 稳定
快速排序 $O(n\log n)$ $O(\log n)$ 不稳定
堆排序 $O(n\log n)$ $O(1)$ 不稳定
计数排序 $O(n+k)$ $O(k)$ 稳定
基数排序 $O(n\times k)$   稳定
桶排序 $O(n)$ $O(m)$ 稳定

算法思路

从待排序数列中选择最小的元素,将它与数列的第一个元素交换位置。再从数列剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。不断进行这样的操作,直到将整个数组排序。

算法实现

设置标志位记录待排序数列中最小元素的下标,每次遍历完成后都将最小元素放在已排序数列的末尾。

def selection_sort(arr):
    arr_len = len(arr)
    if arr_len < 2:
        return
    
    for i in range(arr_len):
        min_index = i
        for j in range(i+1, arr_len):
            if arr[min_index] > arr[j]:
                min_index = j
        if i != min_index:
            arr[i], arr[min_index] = arr[min_index], arr[i]

本博客文章仅供博主学习交流,博主才疏学浅,语言表达能力有限,对知识的理解、编写代码能力都有很多不足,希望各路大神多多包涵,多加指点。