您好,登錄后才能下訂單哦!
碎碎念
這是一個名字起得很隨便的排序算法,是我我就叫他史萊姆排序ㄟ(▔,▔)ㄏ
原理
地精排序是也是一種交換排序。它只進行一輪比較,在這輪比較中,遇到比較前面元素大就向后移動一位繼續(xù)比較,遇到比前面值小就和前面的值交換,并向前移動一位。
復(fù)雜度
對已經(jīng)排序號的隊列哥布林只需從頭走到尾就結(jié)束了,所以最好情況時間復(fù)雜度就是O(n),平均的時間復(fù)雜度也和冒泡排序一樣也是O(n^2)。
代碼
package main
import (
"time"
"fmt"
"math/rand"
)
func main() {
var length = 10
var list []int
// 以時間戳為種子生成隨機數(shù),保證每次運行數(shù)據(jù)不重復(fù)
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 {
// 如果地精發(fā)現(xiàn)自己這個坑位的值不比前面一個坑位的小,就繼續(xù)向下個坑位走過去
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)
}
}
}
運行結(jié)果
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。