zoukankan      html  css  js  c++  java
  • 希尔排序-Python

    希尔排序虽然经常听说,但是不经常玩算法的人可以都没写过,第一次写希尔排序就犯了一个错误

    先上代码

    # -*- coding:utf-8 -*-
    # @Time :2019/7/7 8:29
    # @Author :曾格

    def shell_sort(alist): #错误的希尔排序
    """"希尔排序"""
    n=len(alist)
    gap=n//2
    while gap>0: # 保证gap为1是最后一趟排序
    print("当前步长:{0} ".format(gap))
    i=0 #下标从0开始
    while i<gap: # 每划分一次需要进行gap次排序
    # 每进行一个排序吗,i要加1
    #while循环结束,i要重新从0开始
    j=i
    while j<n-gap: # 一次插入排序
    j=j+gap
    t=j
    while alist[t]<alist[t-gap] and t>=gap:
    alist[t],alist[t-gap]=alist[t-gap],alist[t]
    t-=gap
    i+=1
    gap=gap//2
    return alist

    # 但这样是错误的,这个函数是先把第一个子序列排序完再排接下来一个,然后再排下一个,,,
    # 正确思路应该是一次遍历这些子序列全部排好

    def shell_sorter(alist): #正确的希尔排序
    """"希尔排序"""
    n = len(alist)
    gap = n // 2
    while gap>0:
    for i in range(gap,n):
    j=i
    while alist[j]<alist[j-gap]:
    alist[j],alist[j-gap]=alist[j-gap],alist[j]
    j-=gap
    gap//=2
    return alist


    if __name__=="__main__":
    st=[10,23,56,34,23,67,43,12,3,5,26,46,32,4,65]
    print(shell_sort(st))
    心之所愿,永不相忘
  • 相关阅读:
    微软小娜APP的案例分析
    嵌入式第12次实验
    嵌入式第11次实验
    嵌入式第10次实验报告
    嵌入式第9次实验
    软工 小组作业(第二次)
    嵌入式软件设计第8次实验报告-140201236-沈樟伟
    5月17下
    5月17上
    5月15上午
  • 原文地址:https://www.cnblogs.com/zgll/p/11146021.html
Copyright © 2011-2022 走看看