python3排序算法,Python快速排序算法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: