資料結構&演算法實踐—地精排序及改進

wklken發表於2015-12-26

排序>>交換排序>>地精排序

List:

  1. start

基本概念:

維基百科:http://en.wikipedia.org/wiki/Gnome_sort(目前只有英文版的)

地精排序又稱侏儒排序,類似於插入排序,但是將一個數放入其正確位置的交換同氣泡排序(一系列交換)

簡單,只有一層迴圈,

時間複雜度O(n^2),最優複雜度O(n),平均時間複雜度O(n^2)

其實思想很簡單,往前冒泡,一旦發生資料交換,就往回冒泡,直到把被交換數字放入正確位置,之後,繼續前進

虛擬碼(來自於維基百科)

例子:

1 start

  1. start

觀察上面例子,是不是發現有些彆扭…….

沒錯,若是到了b存在交換,反向冒泡,直至把被交換數冒泡放到其有序位置a,然後再從a->b進行比較冒泡

其實,a->b這一段序列已經是有序的,不需要浪費比較次數在這上面

所以我們進行jump

即,記錄b的位置,當發現反序冒泡沒有交換時(冒泡結束),jump到b位置,繼續正序冒泡

程式碼:

實際過程:

cmp 5 3

cmp 5 2

cmp 3 2

jump 2
cmp 3 5
cmp 5 4

cmp 3 4
jump 4

相同例子的序列,改進前比較次數12,改進後只需要9次

  1. start

A.地精排序概念,過程描述?

B.時間複雜度?空間複雜度?是否是穩定排序?

C.適用場景,何種情況下表現最優

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

打賞作者

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

任選一種支付方式

資料結構&演算法實踐—地精排序及改進 資料結構&演算法實踐—地精排序及改進

相關文章