經典排序演算法 - 地精排序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描述並命名為 地精排序 作為乙個排序演算法,和插入排序類似,除了移動乙個元素到最終的位置,是通過交換一系列的元素實現,就像氣泡排序一 樣。概念上十分簡單,不需要...
排序演算法之地精排序
地精排序是最簡單的排序演算法,它只用一重迴圈就可以實現。它也像氣泡排序一樣,相鄰元素之間兩兩進行比較,如果這兩個元素逆序,則交換。與氣泡排序不同的是,它如果遇到交換操作時,變為向前冒泡,直至不發生交換操作位置。相當於做了乙個插入操作,將比較小的數插入到前面的有序序列中合適的位置。所以,地精排序可以說...