經典排序演算法 地精排序Gnome Sort

2021-06-03 19:32:34 字數 1813 閱讀 5173

經典排序演算法 - 地精排序gnome sort

號稱最簡單的排序演算法,只有一層迴圈,預設情況下前進冒泡,一旦遇到冒泡的情況發生就往回冒,直到把這個數字放好為止

直接看它排序的過程,待排陣列[6 2 4 1 5 9]

先設計乙個標識i=0然後從頭開始判斷,什麼時候(i < 6)不成立,什麼時候排序結束,

所以,如何控制i的值是這個演算法的關鍵

例如待排陣列:

[6 2 4 1 5 9]

[0 1 2 3 4 5]

看一下具體的排序過程

[ i = 0 ]時啥也不幹,先讓i自增1,達到值為1才開始真正的比較

交換前[6 2 4 1 5 9][ i = 0]

交換後[6 2 4 1 5 9][ i = 1]

[ i = 1 ]比較6和2,發生交換,只要發生交換i就減1

交換前[6 2 4 1 5 9][ i = 1]

交換後[2 6 4 1 5 9][ i = 0]

[ i = 0 ]又成0了,啥也不幹,自增變成1再說

交換前[2 6 4 1 5 9][ i = 0]

交換後[2 6 4 1 5 9][ i = 1]

[ i = 1 ]再比較2和6,不交換,只要不要換就自增1

交換前[2 6 4 1 5 9][ i = 1]

交換後[2 6 4 1 5 9][ i = 2]

[ i = 2 ]比較6和4,發生交換,只要交換就減1

交換前[2 6 4 1 5 9][ i = 2]

交換後[2 4 6 1 5 9][ i = 1]

[ i = 1 ]比較2和4,不交換,只要不交換就自增1

交換前[2 4 6 1 5 9][ i = 1]

交換後[2 4 6 1 5 9][ i = 2]

[ i = 2 ]比較4和6,不交換,只要不交換就自增1

交換前[2 4 6 1 5 9][ i = 2]

交換後[2 4 6 1 5 9][ i = 3]

[ i = 3 ]比較6和1,交換,只要交換就減1

交換前[2 4 6 1 5 9][ i = 3]

交換後[2 4 1 6 5 9][ i = 2]

[ i = 2 ]比較4和1,交換,只要交換就減1

交換前[2 4 1 6 5 9][ i = 2]

交換後[2 1 4 6 5 9][ i = 1]

[ i = 1 ]比較2和1,交換,只要交換就減1

交換前[2 1 4 6 5 9][ i = 1]

交換後[1 2 4 6 5 9][ i = 0]

[ i = 0 ]時啥也不幹,先讓i自增1,達到值為1才開始真正的比較

交換前[1 2 4 6 5 9][ i = 0]

交換後[1 2 4 6 5 9][ i = 1]

[ i = 1]比較1和2,不交換,只要不交換就自增1

[ i = 2]比較2和4,不交換,只要不交換就自增1

[ i = 3]比較4和6,不交換,只要不交換就自增1

[ i = 4]比較6和5,交換,只要交換就減1

交換前[1 2 4 6 5 9][ i = 4]

交換後[1 2 4 5 6 9][ i = 3]

[ i = 3]比較4和5,不交換,只要不交換就自增1

[ i = 4]比較5和6,不交換,只要不交換就自增1

[ i = 5]比較6和9,不交換,只要不交換就自增1

[ i = 6]表示式(i < n)不成立,排序結束,

順序輸出結果即可:[ 1 2 4 5 6 9]

void gnomesort(int n, int ar)

Gnome排序(地精排序)

gnome排序 地精排序 起初由hamid sarbazi azad 於2000年提出,並被稱為stupid排序,後來被dick grune描述並命名為 地精排序 作為乙個排序演算法,和插入排序類似,除了移動乙個元素到最終的位置,是通過交換一系列的元素實現,就像氣泡排序一樣。概念上十分簡單,不需要巢...

Gnome排序演算法

gnome排序 地精排序 起初由hamid sarbazi azad 於2000年提出,並被稱為stupid排序,後來被dick grune描述並命名為 地精排序 作為乙個排序演算法,和插入排序類似,除了移動乙個元素到最終的位置,是通過交換一系列的元素實現,就像氣泡排序一 樣。概念上十分簡單,不需要...

排序演算法之地精排序

地精排序是最簡單的排序演算法,它只用一重迴圈就可以實現。它也像氣泡排序一樣,相鄰元素之間兩兩進行比較,如果這兩個元素逆序,則交換。與氣泡排序不同的是,它如果遇到交換操作時,變為向前冒泡,直至不發生交換操作位置。相當於做了乙個插入操作,將比較小的數插入到前面的有序序列中合適的位置。所以,地精排序可以說...