插入排序算法 Go

說明

插入排序,同樣無需申請(qǐng)新的內(nèi)存地址。相對(duì)選擇排序算法運(yùn)行速度稍快。

邏輯

從第二個(gè)元素開始與前一個(gè)元素大小相比較,若小于上一個(gè)元素,則與之交換位置,位移后,并繼續(xù)與上一個(gè)元素比較。若大于等于上一個(gè)元素則此元素位置不再變動(dòng),繼續(xù)對(duì)比下一個(gè)元素。

代碼

package arithmetic

import (
    "math"
)

//InterfaceSort 排序接口 選擇排序 插入排序
type InterfaceSort interface {
    Len() int
    Less(i, j int) bool
    Swap(i, j int)
}

//SortInsertion 插入排序
func SortInsertion(slice InterfaceSort) {

    if slice.Len() < 2 {
        return
    }

    for i := 1; i < slice.Len(); i++ {
        var j = i - 1
        for ; j >= 0; j-- {
            if slice.Less(j+1, j) { // slice[j+1] < slice[j]
                slice.Swap(j+1, j)
            } else {
                break
            }
        }
    }
}

代碼說明

面向?qū)ο髮?shí)現(xiàn),結(jié)構(gòu)體實(shí)現(xiàn)相關(guān)接口即可調(diào)用該函數(shù)。

排序后的結(jié)果直接通過參數(shù)返回。

測(cè)試代碼

package  main

import (
    "AZframework/arithmetic"
    "fmt"
)

//IntSlice []int
type IntSlice []int

func (s IntSlice) Len() int           { return len(s) }
func (s IntSlice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] }

func main() {
    var  sliceC = IntSlice{5, 5, 4, 3, 2, 1, 1}
    arithmetic.SortInsertion(sliceC)
        fmt.Printf("SortInsertion slice = %v \n", sliceC)
}

日志輸出

SortSelection slice = [1 1 2 3 4 5 5]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • 2018年4月25日 昨天晚上閨女因?yàn)槭痔蹧]有寫作業(yè),我和老師說讓她中午補(bǔ)上,中午閨女放學(xué)我因?yàn)橛锌蛻粢?..
    二年級(jí)二班語桐媽媽閱讀 288評(píng)論 0 0
  • 荷西 . 馬利安 . 葛羅。 安息。你的妻子紀(jì)念你。 你死后,愛情殺死了三毛。 送的玫瑰長(zhǎng)出一根根紅刺 刺痛著 花...
    梅夕夕閱讀 368評(píng)論 0 3
  • “做,就是得到!”,簡(jiǎn)單的五個(gè)字,相信每個(gè)人都懂。做即行動(dòng),得到即收獲。這也是從小被教導(dǎo)的一句話:付出才有回報(bào)。 ...
    成長(zhǎng)萱言閱讀 953評(píng)論 4 3
  • 多愛自己幾分總是沒錯(cuò)的,不懼未來任何風(fēng)險(xiǎn),也有說走就走的勇氣 我常常覺得,人與人之間,就是一場(chǎng)拔河比賽,勢(shì)均...
    安安安安安_cc3b閱讀 184評(píng)論 0 0

友情鏈接更多精彩內(nèi)容