"插入排序"和"希尔排序"
一、插入排序
思路:在数列中选定一个数,分成俩组,然后用后边数的和前一组数依次对比,得到新的排序。
代码引入
def insertionSor(array):
for i in range(1,len(array):
j = i
while j > 0 and array[j] < array[j-1]:
array[j-1] ,array[j] = array[j],array[j-1]:
j -= 1
return array
array = [53,27,36,15,69,42]
print(insertionSort(array))
jupyter运行结果:
二、希尔排序
def shell_sort(array):
n = len(array)
gap = n//2
while gap > 0:
for i in range(gap,n):
j = i
while j >= 1 and array[j] < array[j-gap]: #这里j>0 和j>=1都可以
array[j-gap],array[j] = array[j],array[j-gap]
j -=gap
gap //= 2
if __name__ == "__main__":
array = [54,26,93,17,77,31,44,55,20]
print(array)
shell_sort(array)
print(array)
jupyter运行结果:
补充
关于插入排序补充点
这里给一个传送门,有助于大家理解链接: link.
关于希尔排序补充点:
最优时间复杂度:根据步长序列的不同而不同 最坏时间复杂度:O(n^2) 稳定性:不稳定(这里指当列表中的元素,很多时,容易出问题) 视频的传送门(来自b站)链接: link.
**
- 算法的速度指的并非是时间,而是操作数的增速(这点一定要科普,好多人不知道)**
- O(log n) 比O(n)快,当需要搜索的元素越多时,前者比后者快