插入排序是什么
在理解希尔排序之前,我们先来看看什么是插入排序。假设有一个数组要我们排序{6, 4,3,7,5,1,2}。为了方便理解,我们新建一个数组,这个数组中的元素是已经排序好的。(如果理解不了,你就将他当为一个数组好了)。然后我们从要排序数组中任意选取一个数字(为了方便知晓数组排序完毕,从数组的第0项按顺序选取)
步骤:
第一轮:
待排序:{6,4,3,5,1,2}
已排序:{}
从待排序中选取 6 放入到已排序数组中的合适位置
第二轮:
待排序:{4,3,5,1,2}
已排序:{6}
从待排序中选取 4 放入到已排序数组中的合适位置(为了方便查看,先把待排序数组中的6屏蔽)
第三轮:
待排序:{3,5,1,2}
已排序:{4, 6}
从待排序中选取 3 放入到已排序数组中的合适位置
第三轮:
待排序:{5,1,2}
已排序:{3,4,6}
从待排序中选取 5 放入到已排序数组中的合适位置
…
最后一轮:
待排序:{2}
已排序:{1,3,4,5,6}
从待排序中选取 2 放入到已排序数组中的合适位置
待排序:{}
已排序:{1,2,3,4,5,6}
完成了
插入算法的实现
def inser_sort(nums):
# 定义 已经排序好数组的指针 和 尚未排序数组的指针
sorted = 0
unsorted = 1
length = len(nums)
# 运行条件
while sorted < length and unsorted < length:
# 将尚未排序的元素挨个跟已排序数列中的元素比较
for i in range(0, sorted + 1):
# 找到合适位置
if nums[i] >= nums[unsorted]:
# 将未排序数字从后往前交换到已排序数列中的合适位置
for