[golang] 數據結構-地精排序
阿新 • • 發佈:2018-07-31
ffffff 最好 排序。 () col images import else 圖片 碎碎念
這是一個名字起得很隨便的排序算法,是我我就叫他史萊姆排序ㄟ(▔,▔)ㄏ
這是一個名字起得很隨便的排序算法,是我我就叫他史萊姆排序ㄟ(▔,▔)ㄏ
原理
地精排序是也是一種交換排序。它只進行一輪比較,在這輪比較中,遇到比較前面元素大就向後移動一位繼續比較,遇到比前面值小就和前面的值交換,並向前移動一位。
復雜度
對已經排序號的隊列哥布林只需從頭走到尾就結束了,所以最好情況時間復雜度就是O(n),平均的時間復雜度也和冒泡排序一樣也是O(n^2)。
代碼
package main import ( "time" "fmt" "math/rand" ) func main() { var length = 10 var list []int // 以時間戳為種子生成隨機數,保證每次運行數據不重復 r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < length; i++ { list = append(list, int(r.Intn(1000))) } fmt.Println(list) gnome := 1 // 地精從第二個坑位開始向最後一個坑走過去 for gnome < length { // 如果地精發現自己這個坑位的值不比前面一個坑位的小,就繼續向下個坑位走過去 if list[gnome] >= list[gnome-1] { gnome++ } else { // 如果比前個坑位值小,就交換兩個坑位的值,然後再回到前一個坑位 list[gnome], list[gnome-1] = list[gnome-1], list[gnome] if gnome > 1 { gnome-- } fmt.Println(list) } } }
運行結果
[golang] 數據結構-地精排序