数据结构&算法实践—梳子排序

510 查看

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

List:

  1. start

基本概念:

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

伪代码

梳子排序:

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

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

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

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

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

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

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

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

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

gap: 4

gap: 3

gap: 2

gap: 1

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

  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.适用场景