数据结构&算法实践—梳子排序
admin
2023-07-31 00:32:52
0

排序>>交换排序>>梳子排序

List:

123 0.概念+伪代码+示例分析1.梳子排序实现2.Question

  1. start

基本概念:

维基百科http://zh.wikipedia.org/wiki/%E6%A2%B3%E6%8E%92%E5%BA%8F

伪代码

1234 function comb_sort(A: list[1..n]){    gap = A.size    rate = 1.3    while gap  1

梳子排序:

间隔gap 递减率rate(大于1的数)

比较 i 和 i+gap 位置的数字,若反序,交换,然后i+=1,直到比较i+gap超过最大索引

然后gap /= rate,再重复上面操作

直到gap=1 ,执行最后一遍梳理后结束

可以想象成 先拿一把大梳子(只有三个齿两个缝的)从第一个梳到最后一个,把两个缝隙里面反序的数交换

再换把小点的梳子,重复.

最终,中间那个齿消失(梳理相邻两个数),完成最后一遍梳理

例子:(关注gap和cmp的下标)

1 [8, 4, 3, 7, 6, 5, 2, 1]

gap: 6 [初始设定gap=size/1.3]

12345 cmp l[0]=8,l[6]=2change [2, 4, 3, 7, 6, 5,8, 1]cmp l[1]=4,l[7]=1change [2, 1, 3, 7, 6, 5, 8,4]one time: [2, 1, 3, 7, 6, 5, 8, 4]

gap: 4

123456 cmp l[0]=2,l[4]=6cmp l[1]=1,l[5]=5cmp l[2]=3,l[6]=8cmp l[3]=7,l[7]=4change [2, 1, 3, 4, 6, 5, 8,7]one time: [2, 1, 3, 4, 6, 5, 8, 7]

gap: 3

123456 cmp l[0]=2,l[3]=4cmp l[1]=1,l[4]=6cmp l[2]=3,l[5]=5cmp l[3]=4,l[6]=8cmp l[4]=6,l[7]=7one time: [2, 1, 3, 4, 6, 5, 8, 7]

gap: 2

1234567 cmp l[0]=2,l[2]=3cmp l[1]=1,l[3]=4cmp l[2]=3,l[4]=6cmp l[3]=4,l[5]=5cmp l[4]=6,l[6]=8cmp l[5]=5,l[7]=7one time: [2, 1, 3, 4, 6, 5, 8, 7]

gap: 1

1234567891011 cmp l[0]=2,l[1]=1change [1,2, 3, 4, 6, 5, 8, 7]cmp l[1]=2,l[2]=3cmp l[2]=3,l[3]=4cmp l[3]=4,l[4]=6cmp l[4]=6,l[5]=5change [1, 2, 3, 4, 5,6, 8, 7]cmp l[5]=6,l[6]=8cmp l[6]=8,l[7]=7change [1, 2, 3, 4, 5, 6, 7,8]one time: [1, 2, 3, 4, 5, 6, 7, 8]

观察上面例子,梳排序可以有效地将乌龟(尾部的小数值和头部的大数值)调整到有序后位置的附近

  1. start

    :::python
    def comb_sort(l):
    dis = int(len(l)/1.3)
    while dis:
    for i in range(len(l)-dis):
    if l[i] > l[i+dis]:
    l[i], l[i+dis] = l[i+dis], l[i]
    dis = int(dis/1.3)

2 start

A.奇偶排序概念,过程描述?

B. 时间复杂度?空间复杂度?是否是稳定排序?

C.适用场景

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...