来源:
"""
http://mobi.zfpaper.net
http://cctv.zfpaper.net
http://nab.zfpaper.net
http://cctv6.zfpaper.net
http://cctv5.zfpaper.net
""" 插入排序是一种简单直观的排序算法,其工作原理类似于我们整理扑克牌的方式:
以数组 [5, 2, 4, 6, 1, 3] 为例:
下面是插入排序的Python实现代码:
def insertion_sort(arr):
# 遍历从1到数组长度
for i in range(1, len(arr)):
key = arr[i] # 当前需要插入的元素
j = i - 1 # 已排序部分的最后一个元素索引
# 将大于key的元素向后移动
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
# 插入key到正确位置
arr[j + 1] = key
# 测试插入排序
if __name__ == "__main__":
data = [5, 2, 4, 6, 1, 3]
print("原始数组:", data)
insertion_sort(data)
print("排序后数组:", data)50
80
30
90
40
70
20
60
10
开始排序
虽然基本插入排序已经很高效了,但我们还可以进行一些优化:
在已排序部分使用二分查找来定位插入位置,减少比较次数:
def binary_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 key < arr[mid]:
right = mid - 1
else:
left = mid + 1
# 将元素插入到正确位置
for j in range(i - 1, left - 1, -1):
arr[j + 1] = arr[j]
arr[left] = key插入排序在以下场景中特别有用:
插入排序是一种简单但有效的排序算法,特别适合小规模数据集。通过本教程,您应该已经掌握了:
虽然对于大型数据集有更高效的排序算法(如快速排序、归并排序),但插入排序仍然是算法学习中的重要基础,并在特定场景下保持其实用价值。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。