python排序-希尔排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python排序-希尔排序相关的知识,希望对你有一定的参考价值。
Shell 排序利用分组加速部分有序数组排序,分组定长跳跃冒泡
希尔排序的时间性能优于直接插入排序的原因:
①当文件初态基本有序时直接插入排序所需的比较和移动次数均较少。
②当n值较小时,n和 n^2 的差别也较小,即直接插入排序的最好时间复杂度O(n)和最坏时间复杂度0(
)差别不大。
③在希尔排序开始时增量较大,分组较多,每组的记录数目少,故各组内直接插入较快,后来增量di逐渐缩小,分组数逐渐减少,而各组的记录数目逐渐增多,但由于已经按di-1作为距离排过序,使文件较接近于有序状态,所以新的一趟排序过程也较快。
因此,希尔排序在效率上较直接插入排序有较大的改进。
# -*- coding: utf-8 -*- def shell(arr): # 递归跳跃,等同插入移位 def step_insert(_arr, i, h): if i < h or _arr[i] >= _arr[i-h]: return else: _arr[i], _arr[i-h] = _arr[i-h], _arr[i] step_insert(_arr, i-h, h) # 步长 def step_list(_arr): _list = [] h = 1 while h < len(_arr) / 3: _list.append(h) h = 3 * h + 1 return _list[::-1] for h in step_list(arr): for i in range(h, len(arr)): step_insert(arr, i, h)
import random
arr = [random.randint(0, 100) for i in range(20)]
print arr
shell(arr)
print arr
以上是关于python排序-希尔排序的主要内容,如果未能解决你的问题,请参考以下文章