資料結構&演算法實踐—梳子排序

wklken發表於2015-12-04

排序>>交換排序>>梳子排序

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.適用場景

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

資料結構&演算法實踐—梳子排序 資料結構&演算法實踐—梳子排序

相關文章