文章

选择排序(Python)

选择排序 Python 实现

选择排序(Python)

选择排序

排序算法平均时间复杂度空间复杂度稳定性
冒泡排序\(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)$稳定

算法思路

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

算法实现

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

1
2
3
4
5
6
7
8
9
10
11
12
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]

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

本文由作者按照 CC BY 4.0 进行授权