希尔排序(Shell’s Sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本。

希尔排序的工作原理

如下:

(1)把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序;

(2)随着步长逐渐减小,所分成的组包含的记录越来越多;

(3)当步长值减小到1时,整个数据合成一组,构成一组有序记录,完成排序;

代码实现如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "hsz" def shell_sort(alist):
step = len(alist) // 2
while step > 0:
for i in range(step, len(alist)):
# 在索引为step到len(L)上,比较L[i]和L[i-step]的大小
while i >= step and alist[i] < alist[i - step]:
# 这里可以调整step从小到大或者从大到小排列
alist[i], alist[i - step] = alist[i - step], alist[i]
i -= step
step //= 2 if __name__ == "__main__":
li = [1, 3, 2, 32, 5, 4]
print(li)
shell_sort(li)
print(li)

最新文章

  1. android xml特殊字符
  2. Ajax 传统的异步登陆
  3. Wix: Using Patch Creation Properties - Small Update
  4. 关于$.fn
  5. java 自制类加载器的简单实现
  6. $.each()方法详解
  7. js 模拟QQ聊天窗口图片播放效果(带滚轮缩放)
  8. 连接pgsql
  9. 使用block函数的基本形式
  10. 201521123113《Java程序设计》第14周学习总结
  11. 学习phalcon框架按照官网手册搭建第一个项目注册功能
  12. wpf中静态资源和动态资源的区别
  13. 格子刷油漆【动态规划问题】—NYOJ 980
  14. 关于VB里判断逻辑的说明
  15. ESP-EYE V2.1 开发板 WINDOWS 10 开发入门
  16. 设计模式---策略模式Strategy(对象行为型)
  17. SQLserver如何创建一个表
  18. eclipse安装可视化swing插件
  19. Java 基本数据类型 sizeof 功能
  20. python之模块calendar(汇集了日历相关的操作)

热门文章

  1. Chrome 提标 您的浏览器限制了第三方Cookie...解决方法
  2. bootstrap资料索引
  3. Linux - Shell - 算数表达式 - 位运算
  4. (转)http 之session和cookie
  5. c#中convert.toInt32和int.parse()和强制类型转换的区别
  6. OpenCV图像载入、显示和输出到文件以及滑块的使用
  7. Java中怎么把科学计数法显示出全部数字
  8. java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
  9. NOIP2012 疫情控制 题解(LuoguP1084)
  10. 安装apache ActiveMQ