Golang排序和查找使用方法介紹
排序的介紹
排序是將一組數(shù)據,依指定的順序進行排列的過程。
排序的分類:
1.內部排序:
指將需要處理的所有數(shù)據都加載到內部存儲器中進行排序。
包括(交換式排序法,選擇式排序法和插入式排序法);
2.外部排序法
數(shù)據量過大,無法全部加載到內存中,需要借助外部存儲進行排序。包括(合并排序法和直接合并排序法)。
交換式排序法
交換式排序屬于內部排序法,是運用數(shù)據值比較后,依判斷規(guī)則對數(shù)據位置進行交換,以達到排序的目的。
交換排序法又可分為兩種:
1.冒泡排序法(Bubble sort)
2.快速排序法(Quick sort)
交換式排序法-冒泡排序法
冒泡排序(Bubble Sorting)的基本思想是:通過對待排序序列從后向前(從下標較大的元素開始),依次比較相鄰元素的排序碼,若發(fā)現(xiàn)逆序則交換,使排序碼較小的元素逐漸從后部移向前部(從下標較大的單位移向下標較小的單元),就像水底下的氣泡一樣逐漸向上冒。
因為排序的過程中,各元素不斷接近自己的位置,如果一趟比較下來沒有進行過交換,就說明序列有序,因此要在排序過程中設置一個標志flag判斷是否進行過交換。從而減少不必要的比較(優(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,下標%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)
}
二分查找代碼實現(xiàn)
func BinaryFind(arr *[6]int,leftIndex int,rightIndex int,findval int){
// 判斷l(xiāng)eftIndex 是否大于 rightIndex
if leftIndex > rightIndex{
fmt.Println("找不到")
return
}
// 先找到 中間的下標
middle := (leftIndex + rightIndex)/2
if(*arr)[middle] > findVal{
// 說明我們要查找的數(shù),應該在 leftIndex --- middle-1
BinaryFind(arr,leftIndex,middle-1,findVal)
}else if(*arr)[middle] < findVal{
// 說明我們要查找的數(shù),應該在 middle+1 --- rightIndex
BinaryFind(arr,leftIndex,middle-1,findVal)
}else{
// 找到了
fmt.Printf("找到了,下標為%v \n",middle)
}
}
二維數(shù)組的介紹
多維數(shù)組我們只介紹二維數(shù)組
二維數(shù)組的應用場景
比如我們開發(fā)一個五子棋游戲,棋盤就是需要二維數(shù)組來表示。
二維數(shù)組快速入門
快速入門案例:
請使用二維數(shù)組輸出如下圖形

func main(){
// 定義、聲明一個數(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.語法:var 數(shù)組名 【大小】【大小】類型
2.比如:var arr [2][3]int,再賦值
3.使用演示
4.二維數(shù)組在內存中存在形式

使用方式2:直接初始化
聲明:var 數(shù)組名【大小】【大小】類型 = 【大小】【大小】類型{{初始值…},{初始值…}}
賦值(有默認值,比如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)來遍歷
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來遍歷二維數(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)來遍歷
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來遍歷二維數(shù)組
for i,v := range arr3{
for j,v2 := range v{
fmt.Printf("arr3[%v][%v]=%v \t",i,j,v2)
}
fmt.Println()
}
}
二維數(shù)組的應用案例
定義二維數(shù)組,用于保存三個班,每個班五名同學成績,求出每個班級平均分,以及所有班級平均分
func main(){
// 定義一個二維數(shù)組
var scores [3][5]float64
// 循環(huán)的輸入成績
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])
}
}
// 遍歷輸出成績后的二維數(shù)組,統(tǒng)計平均分
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排序和查找使用方法介紹的文章就介紹到這了,更多相關Golang排序和查找內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
GoZero中make后返回數(shù)據與原數(shù)據不對齊的幾種解決方案
在Go語言中,make是用來創(chuàng)建切片、映射(map)和通道(channel)的內建函數(shù),但是,在使用 make 創(chuàng)建切片時,若不理解如何正確使用其返回值,可能會遇到數(shù)據對不上或結果不符合預期的情況,本文將分析在GoZero或其他基于Go的應用中,使用make時可能導致的問題及解決方案2025-01-01
go程序測試CPU占用率統(tǒng)計ps?vs?top兩種不同方式對比
這篇文章主要為大家介紹了go程序測試CPU占用率統(tǒng)計ps?vs?top兩種不同方式對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05

