Ctrl+f搜关键词,搜不到找其他博客,下面肯定没有
时间复杂度
冒泡排序
相邻两个数比较,前面比后面大,则交换位置
选择排序
通过确定一个 Key 最大或最小值,再从带排序的的数中找出最大或最小的交换到对应位置。再选择次之。
插入排序
先得到第一个数,下一个数再根据大小排在序列内,以此类推
希尔排序
#分为有序区和无序区,无序区第一个和有序区最后一个比较,再和有序区倒数第二个比较,以此类推,知道找到位置,然后整体后移一位
def shellSort_2(nums):
n = len(nums) # 数组的长度
# 设定一个增量gap
gap = n // 2
while gap >= 1:
# 分组
for i in range(gap, n):
# i = 5, curNum=43, idx = 0
# [43, ..., 44, ...., 85]
# i=7, curNum=7, idx=2
# [..., 7, ... 59, ...]
curNum = nums[i] # 当前要插入的无序区的元素的值
idx = i - gap # 当前元素所在小组的有序区的最后一个元素的索引
while idx >= 0 and curNum < nums[idx]:
nums[idx+gap] = nums[idx]
idx -= gap
nums[idx+gap] = curNum
gap //= 2 # 缩小增量
# gap=5 [44, 43, 85], [12, 94], [59, 7], [36, 35], [62, 52]
test = [44, 12, 59, 36, 62, 43, 94, 7, 35