博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[算法笔记]: Python 实现的梳排序
阅读量:5749 次
发布时间:2019-06-18

本文共 1111 字,大约阅读时间需要 3 分钟。

算法思路

j ← n, s ← 1.3, flag = falsewhile (j > 1 || falg = true) {        j = max( j / s, 1)        flag = false        i = 0        while (i + j <= n-1) {                if (a[i] > a[i + j]) {                        swap(a[i], a[i + j])                        flag = true        }                i++    }}复制代码

Python实现

def comb_sort(numbers):    n = len(numbers)    # 设置初始阵列长度为n    j = n    # 设置递减比率    s = 1.3    flag = False        # 在循环中,不断缩小j,直至为1    while (j > 1 or flag == True):        j = max(math.floor(j / s), 1)        flag = False        i = 0        while (i + j <= n - 1):            if (numbers[i] > numbers[i+j]):                numbers[i], numbers[i+j] = numbers[i + j], numbers[i]                flag = True            i = i + 1    return numbers复制代码

待排序的数组

numbers = [40, 99, 31, 6, 52, 58, 7, 54, 55, 22]复制代码

排序完成的结果

numbers = [6, 7, 22, 31, 40, 52, 54, 55, 58, 99]复制代码

心得

  • 在冒泡排序算法中,只比较阵列中相邻的二项,即比较的二项的间距(j)是1,梳排序提出此间距其实可大于1
  • 梳排序开始时,设定间距为阵列长度,并在循环中以固定比率递减,递减率设定为1.3
  • 在一次循环中,梳排序如同冒泡排序一样把阵列从首到尾扫描一次,比较及交换两项
  • 如果间距递减至1,梳排序假定输入阵列大致排序好,并以冒泡排序作最后检查及修正。

转载于:https://juejin.im/post/5ab4ae2c51882555627d3881

你可能感兴趣的文章
【React】为什么我不再使用setState?
查看>>
Git原理与高级使用(3)
查看>>
你了解SEO中的时效性吗?
查看>>
从JDK源码看Writer
查看>>
[iOS]0 行代码集成 UILabel 字符串匹配
查看>>
Express 结合 Webpack 实现HMRwi
查看>>
mysql的handler_read_next理解
查看>>
《SAFe 4.0参考指南:精益软件与系统工程的规模化敏捷框架》一1.5 SAFe的原则...
查看>>
终年32岁的传奇数学家,为何让硅谷领袖们集体落泪致敬?
查看>>
listen源码分析第一篇 address:port分析
查看>>
代码不规范,同事两行泪
查看>>
iOS开发UI篇--一个支持图文混排的ActionSheet
查看>>
持续集成:数据库集成及快速构建
查看>>
Java8 方法引用
查看>>
基于jq的bootstrap 常用样式demo 引入css jq js文件后样式出现
查看>>
信息化建设的一些想法和思考
查看>>
ES6之Array.from()方法
查看>>
ios12设计规范(上)
查看>>
Android 网络优化,使用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成
查看>>
GCD Tips
查看>>