91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang排序和查找方法怎么使用

發布時間:2022-12-17 09:48:55 來源:億速云 閱讀:123 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Golang排序和查找方法怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Golang排序和查找方法怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

排序的介紹

排序是將一組數據,依指定的順序進行排列的過程。

排序的分類:

1.內部排序:

指將需要處理的所有數據都加載到內部存儲器中進行排序。

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

2.外部排序法

數據量過大,無法全部加載到內存中,需要借助外部存儲進行排序。包括(合并排序法和直接合并排序法)。

交換式排序法

交換式排序屬于內部排序法,是運用數據值比較后,依判斷規則對數據位置進行交換,以達到排序的目的。

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

1.冒泡排序法(Bubble sort)

2.快速排序法(Quick sort)

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

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

因為排序的過程中,各元素不斷接近自己的位置,如果一趟比較下來沒有進行過交換,就說明序列有序,因此要在排序過程中設置一個標志flag判斷是否進行過交換。從而減少不必要的比較(優化)。

// 冒泡排序
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,下標%v \n",heroName,i)
	}else if i==(len(names)-1){
		fmt.Printf("沒有找到%v \n",heroName)
	}
}
// 順序查找:方式二
index := -1
for i := 0;i<len(names);i++{
   if heroName == names[i]{
	  index = i
	}
}
if index != -1{
	fmt.Printf("找到%v,下標%v \n",heroName,index)
}else{
	fmt.Println("沒有找到",heroName)
}

二分查找代碼實現

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

二維數組的介紹

多維數組我們只介紹二維數組

二維數組的應用場景

比如我們開發一個五子棋游戲,棋盤就是需要二維數組來表示。

二維數組快速入門

快速入門案例:

請使用二維數組輸出如下圖形

Golang排序和查找方法怎么使用

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

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

1.語法:var 數組名 【大小】【大小】類型

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

3.使用演示

4.二維數組在內存中存在形式

Golang排序和查找方法怎么使用

使用方式2:直接初始化

聲明:var 數組名【大小】【大小】類型 = 【大小】【大小】類型{{初始值&hellip;},{初始值&hellip;}}

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

使用演示:

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

二維數組的使用

二維數組的遍歷

雙層for循環完成遍歷

func main(){
 // 演示二維數組的遍歷
 var arr3 = [2][3]int{{1,2,3},{4,5,6}}
 // for循環來遍歷
 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來遍歷二維數組
  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(){
 // 演示二維數組的遍歷
 var arr3 = [2][3]int{{1,2,3},{4,5,6}}
 // for循環來遍歷
 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來遍歷二維數組
  for i,v := range arr3{
	for j,v2 := range v{
	  fmt.Printf("arr3[%v][%v]=%v \t",i,j,v2)
	}
	fmt.Println()
  }
}

二維數組的應用案例

定義二維數組,用于保存三個班,每個班五名同學成績,求出每個班級平均分,以及所有班級平均分

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

讀到這里,這篇“Golang排序和查找方法怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

百色市| 双柏县| 青河县| 杨浦区| 东港市| 布拖县| 蒙城县| 娱乐| 桐梓县| 双城市| 廉江市| 商南县| 正镶白旗| 闽清县| 临武县| 盐源县| 陕西省| 湖州市| 江阴市| 托克托县| 齐齐哈尔市| 临武县| 黄山市| 五原县| 华宁县| 象州县| 盘锦市| 尼勒克县| 庄浪县| 定南县| 嘉义县| 沂水县| 绥德县| 永康市| 海口市| 故城县| 万安县| 彭州市| 昭苏县| 廊坊市| 黔西|