标签:== time() 问题 改进 运行时 range IV 数据 lis
插入排序的改进版本,其核心思想是将原数据集合分割成若干个子序列,然后再对子序列分别进行直接插入排序,使子序列基本有序,最后再对全体记录进行一次直接插入排序。
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:
#相比插入排序,shell排序更适合用于处理data更大的数组 def shell_sort(nums): start = time.time() gap = len(nums) #先指定len长度给gap后续对gap进行分组子序列 length = len(nums) #while用于处理每个大轮的sort while (gap > 0): #两个for循环与插入排序同理 for i in range(gap, length): for j in range(i, gap - 1, -gap): if (nums[j - gap] > nums[j]): nums[j], nums[j - gap] = nums[j - gap], nums[j] if (gap == 2): gap = 1 else: gap = gap // 2 #每一次比上一次大概扩大两倍的分组子序列 t = time.time() - start return nums, t lis = [1,2,5,8,4,3,6] shell_sort(lis) #输出结果 ([1, 2, 3, 4, 5, 6, 8], 0.0)
标签:== time() 问题 改进 运行时 range IV 数据 lis
原文地址:https://www.cnblogs.com/kumata/p/9119704.html