中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

Go語言排序算法之如何實現插入排序與生成隨機數

這篇文章主要為大家展示了“Go語言排序算法之如何實現插入排序與生成隨機數”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Go語言排序算法之如何實現插入排序與生成隨機數”這篇文章吧。

十年的烏海海南網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整烏海海南建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯從事“烏海海南網站設計”,“烏海海南網站推廣”以來,每個客戶項目都認真落實執行。

經典排序算法

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

七大經典排序算法

  • 插入排序

  • 選擇排序

  • 冒泡排序

  • 希爾排序

  • 歸并排序

  • 堆排序

  • 快速排序

插入排序

先考慮一個問題:對于長度為n的數組,前n-1位都是遞增有序的,如何排序?

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

     2.把第k位至第n-1位的數字依次向后挪一位

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

具體實現方法:

package main
import "fmt" 

func insertionSort(arr []int) {
  for i := 1; i < len(arr); i++ {
   value := arr[i]

   for j := i - 1; j >= 0; j-- {
    if value < arr[j] {
     arr[j+1], arr[j] = arr[j], value
    } else {
     break
    }

   }
  }

}

func main() {
 arr := []int{6, 5, 4, 3, 2, 1, 0}
 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(log2n)<O(n)<O(n log2 n)<O(n^2)<O(n^3)<O(2^n)

這里的O就是一般表示復雜度的一個標志,類似計算復雜度的函數名稱一樣。

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

估算的方式就是根據代碼的邏輯,分析出對于復雜度的公式。

在時間復雜度上,主要記錄的是帶有變量的循環。

比如for (i = 0; i < n; i ++) {...}可理解為O(n)

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

在空間復雜度上,主要記錄的是帶有變量的空間申請。

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

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

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

無窮小漸近??茨闶怯迷谒惴ㄟ€是描述數學函數估計中的誤差項

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

  • 當數組是逆序的時候,時間復雜度是O(n*n)

  • 當數組幾乎是有序的時候,時間復雜度是O(n)

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

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

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

  • 把問題分解為子問題

  • 找到問題的初始狀態

  • 從問題的初始狀態,通過子問題,一步步得到最終的解

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

  • 復雜度:包括時間復雜度,空間復雜度,常數等

  • 實現復雜度:算法實現起來很難,不易于測試和維護的話,也是很大的問題

  • 適用性:在特定的業務場景下,是否有更合適的算法?

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

go 生成區間隨機數

// 函 數:生成隨機數 
// 概 要: 
// 參 數: 
//  min: 最小值 
//  max: 最大值 
// 返回值: 
//  int64: 生成的隨機數 
func RandInt64(min, max int64) int64 { 
 if min >= max || min == 0 || max == 0 { 
  return max 
 } 
 return rand.Int63n(max-min) + min 
}

以上是“Go語言排序算法之如何實現插入排序與生成隨機數”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!

網頁標題:Go語言排序算法之如何實現插入排序與生成隨機數
標題URL:http://m.2m8n56k.cn/article0/jdsdio.html

成都網站建設公司_創新互聯,為您提供、響應式網站、服務器托管營銷型網站建設、ChatGPT、小程序開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設
主站蜘蛛池模板: 色综合加勒比 | 欧美一区二区三区视频 | 免费精品久久久久久中文字幕 | 欧美一区二区在线观看免费网站 | 中文国产成人精品久久水 | 亚洲欧美成人在线 | 手机毛片在线 | 国产视频中文字幕 | 国产成人亚洲精品一区二区在线看 | 欧美一级手机免费观看片 | 性刺激欧美三级在线现看中文 | 香蕉久久高清国产精品免费 | 成人a在线观看 | 欧美高清在线精品一区二区不卡 | 久久九九色 | 中文字幕国产一区 | 国产美女视频黄a视频全免费网站 | 欧美一级久久 | 精品久久久久久影院免费 | 色国产精品 | 在线观看欧美亚洲日本专区 | 精品视频在线一区 | 国产亚洲精品久久久久久无 | 日韩一级视频 | 欧美人成在线观看网站高清 | 亚洲福利视频一区二区三区 | 日本激情视频在线观看 | 欧美日韩在线视频观看 | 久久免费精品视频在线观看 | 成人爱做日本视频免费 | 国产三级在线看 | 亚洲国产成人91精品 | 色婷婷激婷婷深爱五月老司机 | 精品手机在线视频 | 国产日韩久久久精品影院首页 | 欧美成人观看免费完全 | 亚洲精品一区亚洲精品 | 一本久久综合 | 久久综合精品不卡一区二区 | 97久久精品视频 | 亚洲欧美极品 |