今天继续学习王晓华老师的算法课程。
哨兵位通常起两个作用,一个是作为临时存储空间使用,另一个是减少不必要的越界判断,简化算法代码复杂度。 ——引自王老师的算法课程d第1-7课
哨兵位插入排序(理解):
Step①把小的数存到哨兵位
Step②比较该位到哨兵位之间的数与哨兵位存储数的大小,大于则朝后移动,直至全部移动完毕;小于则退出while,将哨兵位的数放到当前判断位后面的那个空位。
***查找操作也可以通过设定哨兵位解决越界和找不到的情况。
仿照课程中C++代码直接改写成Python代码:
import pandas as pd
import numpy as np
ls=[4,3,1,2,5,9,23,12,15,27,29]
def insert_sort(ls):
newls=np.append(0,ls)
for i in range(2,len(newls)):
if newls[i]<newls[i-1]:
newls[0]=newls[i]
j=i
while newls[j-1]>newls[0]:
newls[j]=newls[j-1]
j=j-1
newls[j]=newls[0]
return newls[1:len(newls)]
insert_sort(ls)