最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang排序和查找使用方法介紹

 更新時(shí)間:2022年12月16日 17:12:27   作者:2019ab  
排序操作和查找一樣是很多程序經(jīng)常使用的操作。盡管一個(gè)最短的快排程序只要15行就可以搞定,但是一個(gè)健壯的實(shí)現(xiàn)需要更多的代碼,并且我們不希望每次我們需要的時(shí)候都重寫(xiě)或者拷貝這些代碼

排序的介紹

排序是將一組數(shù)據(jù),依指定的順序進(jìn)行排列的過(guò)程。

排序的分類:

1.內(nèi)部排序:

指將需要處理的所有數(shù)據(jù)都加載到內(nèi)部存儲(chǔ)器中進(jìn)行排序。

包括(交換式排序法,選擇式排序法和插入式排序法);

2.外部排序法

數(shù)據(jù)量過(guò)大,無(wú)法全部加載到內(nèi)存中,需要借助外部存儲(chǔ)進(jìn)行排序。包括(合并排序法和直接合并排序法)。

交換式排序法

交換式排序?qū)儆趦?nèi)部排序法,是運(yùn)用數(shù)據(jù)值比較后,依判斷規(guī)則對(duì)數(shù)據(jù)位置進(jìn)行交換,以達(dá)到排序的目的。

交換排序法又可分為兩種:

1.冒泡排序法(Bubble sort)

2.快速排序法(Quick sort)

交換式排序法-冒泡排序法

冒泡排序(Bubble Sorting)的基本思想是:通過(guò)對(duì)待排序序列從后向前(從下標(biāo)較大的元素開(kāi)始),依次比較相鄰元素的排序碼,若發(fā)現(xiàn)逆序則交換,使排序碼較小的元素逐漸從后部移向前部(從下標(biāo)較大的單位移向下標(biāo)較小的單元),就像水底下的氣泡一樣逐漸向上冒。

因?yàn)榕判虻倪^(guò)程中,各元素不斷接近自己的位置,如果一趟比較下來(lái)沒(méi)有進(jìn)行過(guò)交換,就說(shuō)明序列有序,因此要在排序過(guò)程中設(shè)置一個(gè)標(biāo)志flag判斷是否進(jìn)行過(guò)交換。從而減少不必要的比較(優(yōu)化)。

// 冒泡排序
func BubbleSort(arr *[5]int){
  fmt.Println("排序前arr=",(*arr))
  temp := 0
  // 冒泡排序
  for i:=0;i<len(*arr)-1;i++{
	 for j:=0;j<len(*arr)-1-i;j++{
		if(*arr)[j] > (*arr)[j+1]{
			// 交換
			temp = (*arr)[j]
			(*arr)[j] = (*arr)[j+1]
			(*arr)[j + 1] = temp
		}
	 }
   }
   fmt.Println("排序后arr=",(*arr))
}

查找

//順序查找:方式一
for i := 0;i<len(names);i++{
   if heroName == names[i]{
	  fmt.Printf("找到%v,下標(biāo)%v \n",heroName,i)
	}else if i==(len(names)-1){
		fmt.Printf("沒(méi)有找到%v \n",heroName)
	}
}
// 順序查找:方式二
index := -1
for i := 0;i<len(names);i++{
   if heroName == names[i]{
	  index = i
	}
}
if index != -1{
	fmt.Printf("找到%v,下標(biāo)%v \n",heroName,index)
}else{
	fmt.Println("沒(méi)有找到",heroName)
}

二分查找代碼實(shí)現(xiàn)

func BinaryFind(arr *[6]int,leftIndex int,rightIndex int,findval int){
	// 判斷l(xiāng)eftIndex 是否大于 rightIndex
	if leftIndex > rightIndex{
		fmt.Println("找不到")
		return
	}
	// 先找到 中間的下標(biāo)
	middle := (leftIndex + rightIndex)/2
	if(*arr)[middle] > findVal{
		// 說(shuō)明我們要查找的數(shù),應(yīng)該在 leftIndex --- middle-1
		BinaryFind(arr,leftIndex,middle-1,findVal)
	}else if(*arr)[middle] < findVal{
		// 說(shuō)明我們要查找的數(shù),應(yīng)該在 middle+1 --- rightIndex
		BinaryFind(arr,leftIndex,middle-1,findVal)
	}else{
		// 找到了
		fmt.Printf("找到了,下標(biāo)為%v \n",middle)
	}
}

二維數(shù)組的介紹

多維數(shù)組我們只介紹二維數(shù)組

二維數(shù)組的應(yīng)用場(chǎng)景

比如我們開(kāi)發(fā)一個(gè)五子棋游戲,棋盤(pán)就是需要二維數(shù)組來(lái)表示。

二維數(shù)組快速入門(mén)

快速入門(mén)案例:

請(qǐng)使用二維數(shù)組輸出如下圖形

func main(){
	// 定義、聲明一個(gè)數(shù)組
	var arr [4][6]int
	// 賦初值
	arr[1][2]=1
	arr[2][1]=2
	arr[2][3]=3
	// 遍歷二維數(shù)組,按照要求輸出圖形
	for i :=0;i<4;i++{
		for j:=0;j<6;j++{
			fmt.Print(arr[i][j],"")
		}
		fmt.Println()
	}
}

使用方法1:先聲明/定義,再賦值

1.語(yǔ)法:var 數(shù)組名 【大小】【大小】類型

2.比如:var arr [2][3]int,再賦值

3.使用演示

4.二維數(shù)組在內(nèi)存中存在形式

使用方式2:直接初始化

聲明:var 數(shù)組名【大小】【大小】類型 = 【大小】【大小】類型{{初始值…},{初始值…}}

賦值(有默認(rèn)值,比如int 類型的就是0)

使用演示:

var arr3 [2][3]int = [2][3]int{{1,2,3},{4,5,6}}
fmt.Println("arr3=",arr3)

二維數(shù)組的使用

二維數(shù)組的遍歷

雙層for循環(huán)完成遍歷

func main(){
 // 演示二維數(shù)組的遍歷
 var arr3 = [2][3]int{{1,2,3},{4,5,6}}
 // for循環(huán)來(lái)遍歷
 for i := 0;i<len(arr3);i++{
	for j:=0;j<len(arr3[i];j++){
		fmt.Printf("%v\t",arr3[i][j])
	}
	fmt.Println()
  }
  // for-range來(lái)遍歷二維數(shù)組
  for i,v := range arr3{
	for j,v2 := range v{
	  fmt.Printf("arr3[%v][%v]=%v \t",i,j,v2)
	}
	fmt.Println()
  }
}

for-range方式完成遍歷

func main(){
 // 演示二維數(shù)組的遍歷
 var arr3 = [2][3]int{{1,2,3},{4,5,6}}
 // for循環(huán)來(lái)遍歷
 for i := 0;i<len(arr3);i++{
	for j:=0;j<len(arr3[i];j++){
		fmt.Printf("%v\t",arr3[i][j])
	}
	fmt.Println()
  }
  // for-range來(lái)遍歷二維數(shù)組
  for i,v := range arr3{
	for j,v2 := range v{
	  fmt.Printf("arr3[%v][%v]=%v \t",i,j,v2)
	}
	fmt.Println()
  }
}

二維數(shù)組的應(yīng)用案例

定義二維數(shù)組,用于保存三個(gè)班,每個(gè)班五名同學(xué)成績(jī),求出每個(gè)班級(jí)平均分,以及所有班級(jí)平均分

func main(){
  // 定義一個(gè)二維數(shù)組
  var scores [3][5]float64
  // 循環(huán)的輸入成績(jī)
  for i:=0;i<len(scores);i++{
	for j:=0;j<len(scores[i]);j++{
		fmt.Printf("請(qǐng)輸入第%d班的第%d個(gè)學(xué)生的成績(jī)\n",i+1,j+1)
		fmt.Scanln(&scores[i][j])
	}
   }
   // 遍歷輸出成績(jī)后的二維數(shù)組,統(tǒng)計(jì)平均分
   totalSum := 0.0 //定義一個(gè)變量,用于積累所有班級(jí)的總分
   for i := 0;i<len(scores);i++{
		sum := 0.0 // 定義一個(gè)變量,用于累積各個(gè)班級(jí)的總分
		for j := 0; j<len(scores[i]);j++{
			sum += scores[i][j]
		}
		totalSum += sum 
		fmt.Printf("第%d班級(jí)的總分為%v,平均分為%v\n",i+1,sum,sum/float64(len(scores[i])))
	}
	fmt.Printf("所有班級(jí)的總分為%v,所有班級(jí)的平均分為%v\n",totalSum ,totalSum/15)
}

到此這篇關(guān)于Golang排序和查找使用方法介紹的文章就介紹到這了,更多相關(guān)Golang排序和查找內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • GoZero中make后返回?cái)?shù)據(jù)與原數(shù)據(jù)不對(duì)齊的幾種解決方案

    GoZero中make后返回?cái)?shù)據(jù)與原數(shù)據(jù)不對(duì)齊的幾種解決方案

    在Go語(yǔ)言中,make是用來(lái)創(chuàng)建切片、映射(map)和通道(channel)的內(nèi)建函數(shù),但是,在使用 make 創(chuàng)建切片時(shí),若不理解如何正確使用其返回值,可能會(huì)遇到數(shù)據(jù)對(duì)不上或結(jié)果不符合預(yù)期的情況,本文將分析在GoZero或其他基于Go的應(yīng)用中,使用make時(shí)可能導(dǎo)致的問(wèn)題及解決方案
    2025-01-01
  • go日志庫(kù)中的logrus

    go日志庫(kù)中的logrus

    這篇文章主要介紹了go日志庫(kù)中的logrus主要包括go日志庫(kù)logrus的安裝和使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • gin?session中間件使用及源碼流程分析

    gin?session中間件使用及源碼流程分析

    這篇文章主要為大家介紹了gin?session中間件使用及源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang-切片slice的創(chuàng)建方式

    golang-切片slice的創(chuàng)建方式

    這篇文章主要介紹了golang-切片slice的創(chuàng)建方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go基礎(chǔ)教程系列之WaitGroup用法實(shí)例詳解

    Go基礎(chǔ)教程系列之WaitGroup用法實(shí)例詳解

    這篇文章主要介紹了Go基礎(chǔ)教程系列之WaitGroup用法實(shí)例詳解,需要的朋友可以參考下
    2022-04-04
  • golang基礎(chǔ)之Gocurrency并發(fā)

    golang基礎(chǔ)之Gocurrency并發(fā)

    這篇文章主要介紹了golang基礎(chǔ)之Gocurrency并發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Golang標(biāo)準(zhǔn)庫(kù)和外部庫(kù)的性能比較

    Golang標(biāo)準(zhǔn)庫(kù)和外部庫(kù)的性能比較

    這篇文章主要介紹Golang標(biāo)準(zhǔn)庫(kù)和外部庫(kù)的性能比較,下面文章講圍繞這兩點(diǎn)展開(kāi)內(nèi)容,感興趣的小伙伴可以參考一下
    2021-10-10
  • golang中iota的用法小結(jié)

    golang中iota的用法小結(jié)

    iota是Go語(yǔ)言中的一個(gè)預(yù)定義標(biāo)識(shí)符,用于表示const聲明塊中每個(gè)常量的偏移值,本文主要介紹了golang中iota的用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • go程序測(cè)試CPU占用率統(tǒng)計(jì)ps?vs?top兩種不同方式對(duì)比

    go程序測(cè)試CPU占用率統(tǒng)計(jì)ps?vs?top兩種不同方式對(duì)比

    這篇文章主要為大家介紹了go程序測(cè)試CPU占用率統(tǒng)計(jì)ps?vs?top兩種不同方式對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • gin項(xiàng)目部署到服務(wù)器并后臺(tái)啟動(dòng)的步驟

    gin項(xiàng)目部署到服務(wù)器并后臺(tái)啟動(dòng)的步驟

    本文主要介紹了gin項(xiàng)目部署到服務(wù)器并后臺(tái)啟動(dòng)的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論

禄丰县| 临城县| 新建县| 新营市| 衢州市| 苏州市| 鹤山市| 陈巴尔虎旗| 昂仁县| 民县| 苏尼特左旗| 汽车| 关岭| 伊春市| 静宁县| 靖江市| 益阳市| 彩票| 富锦市| 晋宁县| 焉耆| 永平县| 屯留县| 宜兰县| 新竹市| 麻栗坡县| 嘉禾县| 广州市| 新郑市| 仁化县| 安平县| 逊克县| 邹城市| 阿鲁科尔沁旗| 安徽省| 丰原市| 西吉县| 界首市| 色达县| 清原| 商河县|