选择排序算法 Python

PYTHON
def selection_sort(arr):
    """
    选择排序算法(升序)
    :param arr: 待排序列表
    :return: 无(原地排序)
    """
    n = len(arr)
    # 遍历每个位置,确定该位置应该放置的最小元素
    for i in range(n):
        min_idx = i  # 假设当前索引 i 的元素为最小值
        # 在未排序部分 [i+1, n-1] 中寻找更小的元素
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        # 将找到的最小元素与当前位置 i 交换
        arr[i], arr[min_idx] = arr[min_idx], arr[i]


# 测试示例
if __name__ == "__main__":
    test_array = [64, 25, 12, 22, 11]
    print("原始数组:", test_array)
    selection_sort(test_array)
    print("排序后数组:", test_array)

    # 边界测试
    print("\n边界测试:")
    print("空数组:", selection_sort([]) or [])
    print("单元素数组:", selection_sort([1]) or [1])
    print("已排序数组:", (lambda x: selection_sort(x) or x)([1, 2, 3, 4, 5]))
    print("逆序数组:", (lambda x: selection_sort(x) or x)([5, 4, 3, 2, 1]))
    print("含重复元素:", (lambda x: selection_sort(x) or x)([3, 1, 4, 1, 5, 9, 2, 6]))
算法说明: · 核心思想:每次从未排序部分选出最小的元素,放到已排序部分的末尾。 · 时间复杂度:始终为 O(n²)(比较次数固定为 n(n-1)/2)。 · 空间复杂度:O(1),原地排序。 · 稳定性:不稳定(例如 [5, 3, 5, 2],第一个 5 可能被交换到最后)。 执行流程示例(对 [64, 25, 12, 22, 11]): 1. 第一轮:找到最小值 11,与 64 交换 → [11, 25, 12, 22, 64] 2. 第二轮:在 [25, 12, 22, 64] 中找到最小值 12,与 25 交换 → [11, 12, 25, 22, 64] 3. 第三轮:在 [25, 22, 64] 中找到最小值 22,与 25 交换 → [11, 12, 22, 25, 64] 4. 后续轮次已有序,完成排序。
← 返回列表

评论 (0)

登录后可以发表评论

立即登录
💬

还没有评论,快来发表第一条评论吧!