python3排序算法,Python快速排序算法
希尔排序算法的动态图如下:
希尔排序算法
Hill排序算法本质上是对插入排序算法的改进,发现当一串数字基本有序时,插入算法的效率很高。所以希尔排序就是根据这个特点,让一串数字逐渐变得基本有序,直到最后排序。
具体代码实现如下:def shell_sort(datas):
计数=0
gap=len(datas)//2
而间隙0:
指数=0
对于范围内的I(间隙,长度(数据)):
指数=1
temp=datas[i]
对于范围内的j(I,0,-gap):
if温度数据[j-gap]:
数据[j],数据[j-间隙]=数据[j-间隙],数据[j]
计数=1
否则:
如果j!=我:
数据[j]=温度
计数=1
破裂
Print(f 当gap={gap}时,在{index}轮:,datas后插入排序结果)
间隙//=2
打印(在{count}次交换或赋值操作后f )
返回数据
if __name__==__main__ :
数据=[10,9,8,7,6,5,4,3,2,1,0]
Datas=shell_sort(datas)详细结果如下:
当gap=5时,第一轮插入排序后的结果:[5,9,8,7,6,10,4,3,2,1,0]
当gap=5时,第二轮插入排序后的结果:[5,4,8,7,6,10,9,3,2,1,0]
当gap=5时,第三轮插入排序后的结果:[5,4,3,7,6,10,9,8,2,1,0]
当gap=5时,第4轮插入排序后的结果:[5,4,3,2,6,10,9,8,7,1,0]
当gap=5时,第5轮插入排序后的结果:[5,4,3,2,1,10,9,8,7,6,0]
当gap=5时,第6轮插入排序后的结果:[0,4,3,2,1,5,9,8,7,6,10]
当gap=2时,第一轮插入排序后的结果:[0,4,3,2,1,5,9,8,7,6,10]
当gap=2时,第二轮插入排序后的结果:[0,10,3,4,1,5,9,8,7,6,2]
当gap=2时,第三轮插入排序后的结果:[0,10,1,4,3,5,9,8,7,6,2]
当gap=2时,第4轮插入排序后的结果:[0,10,1,4,3,5,9,8,7,6,2]
当gap=2时,第5轮插入排序后的结果:[0,10,1,4,3,5,9,8,7,6,2]
当gap=2时,第6轮插入排序后的结果:[0,10,1,4,3,5,9,8,7,6,2]
当gap=2时,第7轮插入排序后的结果:[0,10,1,4,3,5,7,8,9,6,2]
当gap=2时,第8轮插入排序后的结果:[0,10,1,4,3,5,7,6,9,8,2]
当gap=2时,第9轮插入排序后的结果:[0,10,1,4,2,5,3,6,7,8,9]
当gap=1时,第一轮插入排序后的结果:[0,10,1,4,2,5,3,6,7,8,9]
gap=1时,第二轮插入排序后的结果:[0,1,10,4,2,5,3,6,7,8,9]
gap=1时,第三轮插入排序后的结果:[0,1,4,10,2,5,3,6,7,8,9]
gap=1时,第4轮插入排序后的结果:[0,1,2,4,10,5,3,6,7,8,9]
当gap=1时,第5轮插入排序后的结果:[0,1,2,4,5,10,3,6,7,8,9]
gap=1时,第6轮插入排序后的结果:[0,1,2,3,4,5,10,6,7,8,9]
当gap=1时,第7轮插入排序后的结果:[0,1,2,3,4,5,6,10,7,8,9]
gap=1时,第8轮插入排序后的结果:[0,1,2,3,4,5,6,7,10,8,9]
gap=1时,第9轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,10,9]
gap=1时,第10轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
总共44次之后,在最好的情况下
def shell_sort(数据):
计数=0
gap=len(datas)//2
而间隙0:
指数=0
对于范围内的I(间隙,长度(数据)):
指数=1
temp=datas[i]
对于范围内的j(I,0,-gap):
if温度数据[j-gap]:
数据[j],数据[j-间隙]=数据[j-间隙],数据[j]
计数=1
否则:
如果j!=我:
数据[j]=温度
计数=1
破裂
Print(f 当gap={gap}时,在{index}轮:,datas后插入排序结果)
间隙//=2
打印(在{count}次交换或赋值操作后f )
返回数据
if __name__==__main__ :
数据=[0,1,2,3,4,5,6,7,8,9,10]
datas=shell_sort(datas)的执行结果如下:注意下面虽然打印了很多份,但是交换或赋值操作一次都没有执行,说明执行效率很高。
当gap=5时,第一轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=5时,第二轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=5时,第三轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=5时,第4轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=5时,第5轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=5时,第6轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第一轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第二轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第三轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第4轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第5轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第6轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第7轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第8轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=2时,第9轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=1时,第一轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
gap=1时,第二轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=1时,第三轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
gap=1时,第4轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=1时,第5轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
gap=1时,第6轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
当gap=1时,第7轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
gap=1时,第8轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
gap=1时,第9轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
gap=1时,第10轮插入排序后的结果:[0,1,2,3,4,5,6,7,8,9,10]
总计0
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。