侏儒排序(Gnome sort或Stupid sort)是一種排序算法,最初由伊朗計算機工程師Hamid Sarbazi-Azad博士(謝里夫理工大學計算機工程教授)於2000年提出並被稱為“愚蠢排序”(不是 與bogosort混淆),然後由Dick Grune描述並命名為“gnome sort”。 它是一種類似於插入排序的排序算法,除了將元素移動到適當的位置是通過一系列交換完成的,如冒泡排序。 它在概念上很簡單,不需要嵌套循環。 平均或預期的運行時間是O(n2),但如果列表最初幾乎排序,則傾向於O(n)。
基本介紹
- 中文名:侏儒排序
- 外文名:Gnome sort或Stupid sort
描述
代碼
procedure gnomeSort(a[]):
pos := 0
while pos < length(a):
if (pos == 0 or a[pos] >= a[pos-1]):
pos := pos + 1
else:
swap a[pos] and a[pos-1]
pos := pos - 1
例子
當前數組 | 操作 |
[5, 3, 2, 4] | a[pos] < a[pos-1], swap: |
[3, 5, 2, 4] | a[pos] >= a[pos-1], increment pos: |
[3, 5, 2, 4] | a[pos] < a[pos-1], swap and pos > 1, decrement pos: |
[3, 2, 5, 4] | a[pos] < a[pos-1], swap and pos <= 1, increment pos: |
[2, 3, 5, 4] | a[pos] >= a[pos-1], increment pos: |
[2, 3, 5, 4] | a[pos] < a[pos-1], swap and pos > 1, decrement pos: |
[2, 3, 4, 5] | a[pos] >= a[pos-1], increment pos: |
[2, 3, 4, 5] | a[pos] >= a[pos-1], increment pos: |
[2, 3, 4, 5] | pos == length(a), finished. |
最佳化
procedure optimizedGnomeSort(a[]):
for pos in 1 to length(a):
gnomeSort(a, pos)procedure gnomeSort(a[], upperBound):
pos := upperBound
while pos > 0 and a[pos-1] > a[pos]:
swap a[pos-1] and a[pos]
pos := pos - 1