排序算法之插入排序法解析浅谈

 

什么是插入排序法

插入排序法是一种简单但有效的排序算法,其基本思想是将一个待排序的元素逐个插入到已经排好序的元素序列中,直至所有元素都被插入完成,从而得到一个有序序列。

具体步骤如下:

  1. 假设初始时,第一个元素自成一个有序序列,可以视为已排序部分。
  2. 从第二个元素开始,将它与已排序序列从右往左进行比较,并找到合适的位置插入。
  3. 将待插入元素与已排序序列中的元素逐一比较,如果待插入元素较小,则将已排序元素向右移动一个位置,为待插入元素腾出位置。
  4. 重复步骤3,直到找到插入位置或已遍历完已排序序列。
  5. 将待插入元素插入到找到的插入位置。
  6. 重复步骤2-5,直到所有元素都被插入到正确的位置,排序完成。

插入排序法的时间复杂度为O(n^2),其中n表示待排序元素的个数。在实际情况中,插入排序对于小规模或部分有序的序列表现良好,但对于大规模乱序的序列效率相对较低。

值得注意的是,插入排序是一种稳定的排序算法,即相等元素的相对顺序在排序后保持不变。这使得它在某些特定场景下具有一定的优势。

总结:插入排序通过逐个比较和插入操作来构建有序序列,是一种简单而实用的排序算法。虽然时间复杂度较高,但对于小规模和部分有序的序列可以获得不错的性能。

代码演示

提供一个使用Python实现插入排序的示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

def insertion_sort(arr):

    for i in range(1, len(arr)):

        key = arr[i]  # 当前待插入元素

        j = i - 1     # 已排序部分的最后一个元素下标

        # 将大于待插入元素的元素向右移动

        while j >= 0 and arr[j] > key:

            arr[j + 1] = arr[j]

            j -= 1

        # 在合适位置插入待插入元素

        arr[j + 1] = key

# 测试示例

array = [9, 5, 2, 8, 1, 7]

insertion_sort(array)

print("排序结果:", array)

运行以上代码,将会输出排序结果:

排序结果: [1, 2, 5, 7, 8, 9]

这段代码通过迭代待排序的数组,将每个元素插入到已排序的子数组中的正确位置,从而得到一个有序的数组。希望这个示例能够帮助您理解插入排序算法的实现过程。

算法优化

  1. 二分查找插入:在插入排序的过程中,可以利用二分查找来确定待插入元素的正确位置。具体步骤如下:
    • 将待插入元素与已排序部分的中间元素进行比较。
    • 如果待插入元素小于中间元素,则将插入位置限定在左半部分;否则,将插入位置限定在右半部分。
    • 重复以上步骤,缩小查找范围,直到确定待插入元素的位置。
    • 插入元素到正确位置后,将已排序部分的元素整体向右移动一个位置,给待插入元素腾出空间。
  2. 提前终止:在插入排序的过程中,如果发现待插入元素已经处于正确的位置上,则可以提前终止内层循环,减少不必要的比较次数。

下面是对插入排序算法进行了优化的示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

def insertion_sort(arr):

    for i in range(1, len(arr)):

        key = arr[i]  # 当前待插入元素

        left = 0      # 已排序部分的起始位置

        right = i - 1 # 已排序部分的最后一个元素下标

        # 使用二分查找找到待插入元素的正确位置

        while left <= right:

            mid = (left + right) // 2

            if arr[mid] < key:

                left = mid + 1

            else:

                right = mid - 1

        # 在合适位置插入待插入元素,并提前终止内层循环(如果已经处于正确位置)

        for j in range(i - 1, left - 1, -1):

            if arr[j] == key:

                break

            arr[j + 1] = arr[j]

        else:

            arr[left] = key

# 测试示例

array = [9, 5, 2, 8, 1, 7]

insertion_sort(array)

print("排序结果:", array)

通过以上优化,插入排序算法可以更高效地对数组进行排序。希望这个优化后的示例能够满足您的需求。

转自:微点阅读   https://www.weidianyuedu.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值