📜  算法|排序|问题10(1)

📅  最后修改于: 2023-12-03 15:41:09.396000             🧑  作者: Mango

算法 | 排序 | 问题10

简介

本文将介绍一种常见的排序算法——插入排序,并通过问题10来演示其应用。

插入排序是一种简单直观、易于理解和实现的排序算法,也是一种稳定排序算法。它是通过构建有序序列,对未排序的数据逐个插入到有序序列中,以达到排序的目的。

问题10:给定一个整数数组 nums,将该数组升序排列。

示例:

输入: [5,2,3,1]
输出: [1,2,3,5]
实现

以下为使用Python实现插入排序的代码:

def insertion_sort(nums):
    for i in range(1, len(nums)):
        j = i
        while j > 0 and nums[j] < nums[j-1]:
            nums[j], nums[j-1] = nums[j-1], nums[j]
            j -= 1
    return nums

代码解读:

  • 循环从数组的第二个元素开始,即 for i in range(1, len(nums)):
  • j 表示当前待插入元素的位置,从 i 开始
  • 如果当前待插入元素比前一个元素小,则交换它们的位置,并将 j 的值减 1
测试

以下是对插入排序的性能测试:

from random import randint
import time

nums = [randint(-1000, 1000) for _ in range(10000)]

start = time.time()
insertion_sort(nums)
print("插入排序耗时:", time.time() - start)

运行结果:

插入排序耗时: 5.590409994125366
算法分析
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 稳定性:稳定

虽然插入排序的时间复杂度较高且不如快速排序等高级算法,但其实现简单,代码量较小,适用于数据规模较小的场景。在大多数语言的排序库中,也都包含了插入排序的实现。