欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Go語言實現(xiàn)插入排序算法及優(yōu)化

 更新時間:2022年12月12日 09:24:23   作者:陳明勇  
插入排序是一種簡單的排序算法。這篇文章將利用Go語言實現(xiàn)冒泡排序算法,文中的示例代碼講解詳細,對學習Go語言有一定的幫助,需要的可以參考一下

插入排序

插入排序是一種簡單的排序算法,以數(shù)組為例,我們可以把數(shù)組看成是多個數(shù)組組成。插入排序的基本思想是往前面已排好序的數(shù)組中插入一個元素,組成一個新的數(shù)組,此數(shù)組依然有序。光看文字可能不理解,讓我們看看圖示:

插入排序的時間復雜度為 O(N²)。

算法實現(xiàn)

import (
    "fmt"
)

func main() {
    nums := [4]int{4, 1, 3, 2}
    fmt.Println("原數(shù)組:", nums)
    fmt.Println("--------------------------------")
    InsertionSort(nums)
}

func InsertionSort(nums [4]int) {
    for i := 1; i < len(nums); i++ {
            for j := i; j > 0 && nums[j] < nums[j-1]; j-- {
                    nums[j], nums[j-1] = nums[j-1], nums[j]
            }
            fmt.Printf("第 %d 輪后:%v\n", i, nums)
    }
    fmt.Println("--------------------------------")
    fmt.Println("排序后的數(shù)組:", nums)
}

執(zhí)行結(jié)果:

原數(shù)組: [4 1 3 2]
--------------------------------
第 1 輪后:[1 4 3 2]
第 2 輪后:[1 3 4 2]
第 3 輪后:[1 2 3 4]
--------------------------------
排序后的數(shù)組: [1 2 3 4]

1.第一層循環(huán)的 i 變量,表示待排序的元素;

2.第二層循環(huán):

j 變量的初值為 i 的值,由 j 變量往前去尋找待插入的位置;

  • 循環(huán)條件為 j > 0 && nums[j] < nums[j - 1]
  • j > 0 → 尋找到左邊界則結(jié)束尋找;

nums[j] < nums[j - 1] → 左邊元素小于待排序的元素則結(jié)束尋找;

3.循環(huán)體為元素交換邏輯,只要滿足循環(huán)條件,則不斷交換元素,直到交換到待插入的位置,才終止。

算法優(yōu)化

上面的代碼,是通過不斷地交換元素,直到無法交換,才能將元素放置到待插入的位置,為了避免頻繁交換元素而導致效率低,將交換的邏輯變成把前面的數(shù)往后移,最后再將待排序的元素插入到合適的位置即可。

import (
    "fmt"
)

func main() {
    nums := [4]int{4, 1, 3, 2}
    fmt.Println("原數(shù)組:", nums)
    fmt.Println("--------------------------------")
    InsertionSort(nums)
}

func InsertionSort(nums [4]int) {
    for i := 1; i < len(nums); i++ {
        t := nums[i]
        j := i
        for ; j > 0 && t < nums[j-1]; j-- {
            nums[j] = nums[j-1]
        }
        nums[j] = t
        fmt.Printf("第 %d 輪后:%v\n", i, nums)
    }
    fmt.Println("--------------------------------")
    fmt.Println("排序后的數(shù)組:", nums)
}

用變量 t 記錄待排序的元素,用 j 變量往前查找,只要前面的數(shù)比 t 大,那么就往后移,最后將 t 插入到合適的位置。

小結(jié)

本文首先對插入排序進行簡單地介紹,通過圖片來演示插入排序的過程,然后使用 Go 語言實現(xiàn)插入排序的算法。為減少算法中交換次數(shù)的邏輯,對算法進行優(yōu)化,將交換的邏輯變成把前面的數(shù)往后移,最后將待排序的數(shù)插入到合適的位置即可。

除了這種優(yōu)化方式,還有一種改造方式:普通的算法往左查找的方式是線性查找,由于元素是有序的,因此線性查找可以換成二分查找,但是經(jīng)過二分找到待插入的位置之后,也得移動前面的元素,相比上面的優(yōu)化方法,還多了 O(logn) 的查找時間復雜度,因此我認為沒有必要改造成二分查找。

到此這篇關(guān)于基于Go語言實現(xiàn)插入排序算法及優(yōu)化的文章就介紹到這了,更多相關(guān)Go語言插入排序算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過源碼分析Golang?cron的實現(xiàn)原理

    通過源碼分析Golang?cron的實現(xiàn)原理

    golang實現(xiàn)定時任務很簡單,只須要簡單幾步代碼即可以完成,最近在做了幾個定時任務,想研究一下它內(nèi)部是怎么實現(xiàn)的,所以將源碼過了一遍,記錄和分享在此。需要的朋友可以參考以下內(nèi)容,希望對大家有幫助
    2022-10-10
  • 解決GOPATH在GOLAND中的坑

    解決GOPATH在GOLAND中的坑

    這篇文章主要介紹了解決GOPATH在GOLAND中的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言常用的打log方式詳解

    Go語言常用的打log方式詳解

    Golang的log包短小精悍,可以非常輕松的實現(xiàn)日志打印轉(zhuǎn)存功能,下面這篇文章主要給大家介紹了關(guān)于Go語言常用的打log方式的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • go語言寫的簡要數(shù)據(jù)同步工具詳解

    go語言寫的簡要數(shù)據(jù)同步工具詳解

    作為go-etl工具的作者,想要安利一下這個小巧的數(shù)據(jù)同步工具,它在同步百萬級別的數(shù)據(jù)時表現(xiàn)極為優(yōu)異,基本能在幾分鐘完成數(shù)據(jù)同步,這篇文章主要介紹了go語言寫的簡要數(shù)據(jù)同步工具,需要的朋友可以參考下
    2024-07-07
  • Golang繪制數(shù)列趨勢圖的操作步驟

    Golang繪制數(shù)列趨勢圖的操作步驟

    數(shù)列趨勢圖是用來表示數(shù)列中各項之間的變化趨勢的圖形,它可以幫助我們觀察和分析數(shù)列的規(guī)律和特點,一般來說,數(shù)列趨勢圖可以分為兩種類型:折線圖和散點圖,本文給大家介紹了Golang繪制數(shù)列趨勢圖的操作步驟,文中有詳細的代碼示例,需要的朋友可以參考下
    2024-04-04
  • 淺析Go語言中的方法集合與選擇receiver類型

    淺析Go語言中的方法集合與選擇receiver類型

    這篇文章主要為大家詳細介紹了Go語言中的方法集合與選擇receiver類型的相關(guān)知識,文中的示例代碼講解詳細,對我們深入學習go語言有一定的幫助,需要的可以參考下
    2023-11-11
  • Go中sync.Mutex 加鎖失效的問題解決

    Go中sync.Mutex 加鎖失效的問題解決

    sync.Mutex是Go標準庫中常用的一個排外鎖,本文主要介紹了Go中sync.Mutex 加鎖失效的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • Go實現(xiàn)快速生成固定長度的隨機字符串

    Go實現(xiàn)快速生成固定長度的隨機字符串

    這篇文章主要為大家詳細介紹了怎樣在Go中簡單快速地生成固定長度的隨機字符串,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以學習一下
    2022-10-10
  • GO文件創(chuàng)建及讀寫操作示例詳解

    GO文件創(chuàng)建及讀寫操作示例詳解

    這篇文章主要為大家介紹了GO文件創(chuàng)建及讀寫操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go語言字符串及strings和strconv包使用實例

    Go語言字符串及strings和strconv包使用實例

    字符串是工作中最常用的,值得我們專門的練習一下,下面這篇文章主要給大家介紹了關(guān)于Go語言字符串及strings和strconv包使用的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06

最新評論