Go语言核心编程---08排序和查找

8.1 排序

8.1.1 排序的介绍

排序的分类:

  • 内部排序:将需要处理的所有数据都加载到内部存储器中进行排序,包括交换式排序法、选择式排序法和插入式排序法。

  • 外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序,包括合并排序法和直接合并排序法。

8.1.2 冒泡排序

package main

import "fmt"

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; j++ {
         if arr[j] > arr[j+1] {
            temp = (arr)[j]
            arr[j] = arr[j+1]
            arr[j+1] = temp
         }
      }
   }

   fmt.Println("排序后 arr = ", (*arr))
}

func main() {

   arr := [5]int{45,9,-2,99,0}
   BubbleSort(&arr)
   fmt.Println("main arr = ", arr)
}

8.2 查找

8.2.1 二分查找

package main

import "fmt"

func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int){
   if leftIndex > rightIndex {
      fmt.Println("找不到")
      return
   }

   middle := leftIndex + (rightIndex - leftIndex)/2
   if(arr[middle] > findVal) {
      BinaryFind(arr, leftIndex, middle - 1, findVal)
   } else if(arr[middle] < findVal) {
      BinaryFind(arr, middle + 1, rightIndex, findVal)
   } else {
      fmt.Printf("找到了,下标为%v\n", middle)
   }
}

func main() {

   arr := [6]int{1, 5, 10,89, 1000, 1234}
   BinaryFind(&arr, 0, len(arr)-1, -5)

}

8.3 二维数组

8.3.1 使用方式
  • 方式1:先声明/定义,再赋值

    • 语法:var 数组名 [大小][大小]类型

    • 内存布局:


var arr [2][3]int
arr[1][1] = 10
fmt.Println(arr) //[[0 0 0] [0 10 0]]

fmt.Printf("arr[0]的地址%p\n", &arr[0]) //arr[0]的地址0xc000120030
fmt.Printf("arr[1]的地址%p\n", &arr[1]) //arr[1]的地址0xc000120048

fmt.Printf("arr[0][0]的地址%p\n", &arr[0][0]) //arr[0][0]的地址0xc000120030
fmt.Printf("arr[1][0的地址%p\n", &arr[1][0]) //arr[1][0的地址0xc000120048
  • 方式2:直接初始化

    • var 数组名 [大小][大小]类型 = [大小][大小]类型{{初始值..}, {初始值..}}

    • var 数组名 [大小][大小]类型 = [...][大小]类型{{初始值..}, {初始值..}}

    • var 数组名 = [大小][大小]类型{{初始值..}, {初始值..}}

    • var 数组名 = [...][大小]类型{{初始值..}, {初始值..}}

8.3.2 二维数组的遍历
  • 双层for循环完成遍历

  • for-range完成遍历


for i, v := range arr {

    for j, v2 := range v {

        fmt.Printf("arr[%v][%v]=%v \t", i, j, v2)

    }

    fmt.Println()

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值