• 12-谢尔排序


    # 我们注意到插入排序的比对次数,在最好的情况下是O(n),这种情况发生在列表已是有序的情况下,
    # 实际上,列表越接近有序,插入排序的比对次数就越少
    # 从这个情况入手,谢尔排序以插入排序作为基础,对无序表进行间隔划分子列表,每个子列表都执行插入排序
    # 子列表的间隔一般从n/2开始,每趟倍增:n/4, n/8......直到1
    # 谢尔排序的时间复杂度约为O(n**1.5)
    
    
    def gapInsertionSort(alist, start, gap):
        for i in range(start+gap, len(alist), gap):
            currentvalue = alist[i]
            position = i
            while position >= gap and alist[position-gap] > currentvalue:
                alist[position] = alist[position-gap]
                position = position - gap
            alist[position] = currentvalue
    
    
    def shellSort(alist):
        sublistcount = len(alist) // 2
        while sublistcount > 0:
            for startposition in range(sublistcount):
                gapInsertionSort(alist, startposition, sublistcount)
            sublistcount = sublistcount // 2
    
    
    testlist = [2, 3, 3, 243, 24, 24455, 23]
    shellSort(testlist)
    print(testlist)
    
  • 相关阅读:
    PHP $_POST 变量
    PHP $_GET 变量
    PHP 完整表单实例
    PHP 表单
    PHP 表单
    PHP 表单验证
    00_前情回顾
    18_今日回顾
    VMware 12PRO安装Mac OS X 10.10.5
    05_传智播客iOS视频教程_第一个OC程序
  • 原文地址:https://www.cnblogs.com/lotuslaw/p/13968817.html
Copyright © 2020-2023  润新知