玩转Python插入排序,从基础到进阶

简介: 插入排序是一种简单但有效的排序算法。它的基本思想是将待排序的元素逐个插入已排序序列中的正确位置,直到所有元素都被插入完成。插入排序的算法复杂度为O(n^2),适用于小规模的数据排序。本文将介绍插入排序的原理、具体实现和优化,并提供相关的Python代码示例。

插入排序是一种简单但有效的排序算法。它的基本思想是将待排序的元素逐个插入已排序序列中的正确位置,直到所有元素都被插入完成。插入排序的算法复杂度为O(n^2),适用于小规模的数据排序。本文将介绍插入排序的原理、具体实现和优化,并提供相关的Python代码示例。

一、插入排序的基本原理

插入排序的基本原理可以用以下步骤描述:

  1. 将待排序序列的第一个元素看作已排序序列。
  2. 从第二个元素开始,逐个将元素插入已排序序列的正确位置。
  3. 每次插入时,从后往前比较已排序序列中的元素,将比当前元素大的元素依次向后移动,直到找到合适的插入位置。
  4. 重复步骤3,直到所有元素都被插入完成,得到有序序列。

插入排序的关键在于找到插入位置并进行元素的后移操作。这种排序算法类似于我们打扑克牌时整理手中的牌,每次将一张新牌插入到已排序的牌中的正确位置。

二、插入排序的具体实现

下面是插入排序的具体实现代码:

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  # 将当前元素插入到正确位置

    return arr

三、插入排序的优化

插入排序是一种简单但是效率较低的排序算法,特别是对于大规模数据的排序。但是,我们可以通过一些优化策略来提高插入排序的性能。

优化1:减少元素的比较次数

在内层循环中,我们可以通过使用“哨兵”来避免每次比较都需要检查边界条件。我们可以将待插入的元素复制到一个临时变量中,并将其作为哨兵,然后在内层循环中只比较哨兵与已排序元素,而不是每次都访问原始数组。

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 当前待插入元素
        j = i - 1  # 已排序序列的最后一个元素的索引

        while arr[j] > key:
            arr[j + 1] = arr[j]  # 比当前元素大的元素向后移动
            j -= 1

        arr[j + 1] = key  # 将当前元素插入到正确位置

    return arr

优化2:使用二分查找确定插入位置

传统的插入排序是通过逐个比较已排序元素找到正确的插入位置。但是,我们可以使用二分查找来确定插入位置,从而减少比较的次数。

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 当前待插入元素
        left, right = 0, i - 1  # 已排序序列的左右边界

        while left <= right:
            mid = (left + right) // 2  # 中间位置
            if arr[mid] > key:
                right = mid - 1
            else:
                left = mid + 1

        for j in range(i - 1, left - 1, -1):
            arr[j + 1] = arr[j]  # 比当前元素大的元素向后移动

        arr[left] = key  # 将当前元素插入到正确位置

    return arr

四、总结

本文介绍了插入排序的原理、具体实现和优化。插入排序是一种简单但有效的排序算法,适用于小规模的数据排序。通过不断将元素插入已排序序列的正确位置,最终得到有序序列。我们还介绍了两种优化策略,包括减少元素的比较次数和使用二分查找确定插入位置。这些优化可以提高插入排序的性能。通过掌握插入排序的原理和优化方法,我们可以更好地理解和应用这一常用的排序算法。

五、最后

关注我,更多精彩内容立即呈现!

目录
相关文章
|
17天前
|
Python
空间管理大师已上线!(2),Python高级工程师进阶学习】
空间管理大师已上线!(2),Python高级工程师进阶学习】
|
19天前
|
Python
【Python进阶(五)】——模块搜索及工作目录
【Python进阶(五)】——模块搜索及工作目录
|
13天前
|
网络协议 Linux Python
Python进阶---网络编程
Python进阶---网络编程
31 2
|
13天前
|
Python
Python进阶---闭包和装饰器
Python进阶---闭包和装饰器
26 2
|
13天前
|
Python
Python基础 笔记(九) 函数及进阶
Python基础 笔记(九) 函数及进阶
34 6
|
14天前
|
数据采集 关系型数据库 MySQL
2024年最全python进阶系列- 04 集合,2024年最新哈希表 面试
2024年最全python进阶系列- 04 集合,2024年最新哈希表 面试
|
14天前
|
开发工具 Python 容器
2024年最全python进阶系列- 04 集合(1),面试高频问题回答
2024年最全python进阶系列- 04 集合(1),面试高频问题回答
2024年最全python进阶系列- 04 集合(1),面试高频问题回答
|
19天前
|
Python
【Python进阶(三)】——面向对象编程
【Python进阶(三)】——面向对象编程
|
3天前
|
Python 容器
GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践
当下是 Python 急剧发展的时代,越来越多的人开始学习和使用Pyhon,而大家也遇到了各种问题。这份手册清晰、细致地介绍了 Python 代码应该遵循的编程风格,并解释了背后的原理和机制。 入门 Python 语言相对简单,但写出优雅的代码并非易事。这份手册深入讲解了 Python进阶知识的方方面面,并配以许多有趣的案例故事,使读者能更轻松地理解各种原理,并更好地将其运用于日常工作。
|
13天前
|
JSON JavaScript API
Python进阶---FastAPI框架
Python进阶---FastAPI框架
37 2