1、根据相邻元素进行排序,如果直接插入排序为步长为1,则希尔排序为步长为K插入排序。
2、然后在步长K排序的基础上对步长m进行排序,K大于m,最后对步长1进行排序。
实例
defshell_sort(data_list): ''' 思想:分治策略 使用for循环 ''' length=len(data_list) space=length//2 whilespace>0: foriinrange(space,length):#默认情况下,第一个位置的元素是已排序的范围,因此从1开始下标 tmp=data_list[i]#要插入的数据 index=i forjinrange(i-space,-1,-space):#从排序区间找到插入位置 iftmp<data_list[j]: data_list[j+space]=data_list[j]#元素向后移动,腾出插入位置 index=j#最后一个j是插入的位置 else: break data_list[index]=tmp#插入操作 print(data_list) space=space//2 returndata_list defshell_sort2(data_list): ''' 思想:分治策略 使用while循环 ''' length=len(data_list) space=length//2 whilespace>0: i=space whilei<length:#默认情况下,第一个位置的元素是排序区间,因此,从1开始下标 tmp=data_list[i]#要插入的数据 j=i whilej>=spaceanddata_list[j-space]>tmp:#从排序区间找到插入位置 data_list[j]=data_list[j-space]#元素向后移动,腾出插入位置 j-=space data_list[j]=tmp#插入操作 print(data_list) i+=1 space=space//2 returndata_list
以上是python希尔排序的用法,希望对大家有所帮助。更多Python学习指导:python基础教程
本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。