Go語言排序演算法之插入排序與生成隨機數詳解

2022-09-24 18:24:09 字數 2142 閱讀 5387

前言

排序,對於每種程式語言都是要面對的。這裡跟大家一起分享golang實現一些排序演算法,並且說明如何生成隨機數。下面話不多說了,來一起看看詳細的介紹吧。

經典排序演算法

演算法的學習非常重要,是檢驗乙個程式設計師水平的重要標準。學習演算法不能死記硬背,需要理解其中的思想,這樣才能靈活應用到實際的開發中。

七大經典排序演算法

插入排序

先考慮乙個問題:對於長度為n的陣列,前n-1位都是遞增有序的,如何排序?

1.從第1位至第n-1位遍歷陣列,發現第n位數字應該放在第k位

www.cppcns.com2.把第k位至第n-1位的數字依次向後挪一位

3.這樣長度為n的陣列就是遞增有序的了

具體實現方法:

package main

import "fmt"

func insertionsort(arr int) else }}}

func main()

insertionsort(arr)

fmt.println("sorted arr: ", arr)

}複雜度:

時間複雜度:o(n*n)

空間複雜度:額外空間o(1)

o表示式(big o notation)通常用來在電腦科學中表示演算法的複雜度,包括:

時間複雜度:衡量演算法的執行時間

空間複雜度:衡量演算法執行所佔的空間,比如記憶體或硬碟等

一般情況下,o表示式代表的是最壞情況下的複雜度。

演算法分析也是如此,在n個隨即數中查詢某個數字,最好的情況是第乙個數字就是,此時時間複雜度為o(1),若最後乙個數字才是我們要找的,那麼時間複雜度是o(n),這是最壞的情況。而平均執行時間是從概率的角度看,若數字在每乙個位置都可能出現,則平均查詢次數為n/2次。

平均執行時間是所有情況中最有意義的,因為它是期望的執行時間。可現實中,平均執行時間很難通過分析得到,一般都是通過執行一定數量的實驗資料後估算而來的。而最壞執行時間是一種保證,那就是執行時間不會再壞了。在應用中,這是最重要的需求,通常,除非特別指定,我們提到的執行時間都是最壞情況下的執行時間。即,時間複雜度是最壞情況下的時間複雜度。

常見的演算法時間複雜度由小到大依次為:

o(1)

這裡的o就是一般表示複雜度的乙個標誌,類似計算複雜度的函式名稱一樣。

兩種複雜度都是一種估算,

估算的方式就是根據**的邏輯,分析出對於複雜度的公式。

在時間複雜度上,主要記錄的是帶有變數的迴圈。

比如for (i = 0; i < n; i ++) 可理解程式設計客棧為o(n)

而 x = n + 1; y = x + 1; z = x + y;雖然是三條語句,但是沒有迴圈操作,所以理解為o(1)

在空間複雜度上,www.cppcns.com主要記錄的是帶有變數的空間申請。

比如int[n] x;可以理解為o(n)

而 int x; int y; int z;雖然是三個變數,但是沒有變化的申請操作,所以理解為o(1)

大o符號是用於描述函式漸近行為的數學符號。既可以表示無窮大漸近也可以表示

無窮小漸近。看你是用在演算法還是描述數學函式估計中的誤差項

再來看看我們的插入排序:

另外插入排序的overhead特別小,可以理解為常數等於1

在實際應用中,常數也是乙個很重要的因素。有的演算法複雜度低,但是常數較高;再加上資料的特點,有時候反而比不上複雜度更高但是常數低的演算法。

在理解插入排序演算法的過程中,應該要明白乙個演算法思想:

實際應用中,要靈活的選擇演算法,有幾個重點要考慮的:

總的來說,要具體情況具體分析,在滿足業務的同時要簡潔的解決問題。

go 生成區間隨機數

/程式設計客棧/ 函 數:生成隨機數

// 概 要:

// 參 數:

// min: 最小值

// max: 最大值

// 返回值:

// int64: 生成的隨機數

func randint64(min, max int64) int64

return rand.int63n(max-min) + min

}參考文章: 【bat後台入門】第二課:陣列與排序

總結本文標題: go語言排序演算法之插入排序與生成隨機數詳解

本文位址: /jiaoben/golang/209799.html

C 語言排序演算法之插入排序

1.基本思想 將未排序的資料元素按大小順序插入到已排好序資料序列中,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。例如 對2,4,3,1,6,5進行插入排序。進行排序前,預設2是有序的,為有序區,而4,3,1,6,5是無序的,為無序區。將這五個無序的數按從小到大的順序插入到有序區。...

排序演算法之插入排序

排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...

排序演算法之插入排序

排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...