網站首頁 編程語言 正文
排序的介紹
排序是將一組數據,依指定的順序進行排列的過程。
排序的分類:
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) } }
二維數組的介紹
多維數組我們只介紹二維數組
二維數組的應用場景
比如我們開發一個五子棋游戲,棋盤就是需要二維數組來表示。
二維數組快速入門
快速入門案例:
請使用二維數組輸出如下圖形
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.二維數組在內存中存在形式
使用方式2:直接初始化
聲明:var 數組名【大小】【大小】類型 = 【大小】【大小】類型{{初始值…},{初始值…}}
賦值(有默認值,比如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) }
原文鏈接:https://blog.csdn.net/ab15176142633/article/details/127240522
相關推薦
- 2023-07-28 nrm的安裝與配置及問題修復
- 2022-09-14 Python安裝xarray庫讀取.nc文件的詳細步驟_python
- 2022-04-16 pycharm三個有引號不能自動生成函數注釋的問題_python
- 2022-04-17 解決SpringBoot攔截器中無法依賴注入bean
- 2022-05-21 Kubernetes特別屬性的標簽Label的強大作用_服務器其它
- 2022-07-11 jenkins數據遷移和備份
- 2022-09-09 python實現0到1之間的隨機數方式_python
- 2022-04-15 C語言?使用qsort函數來進行快速排序_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支