排序和查找3

Posted green-frog-2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序和查找3相关的知识,希望对你有一定的参考价值。

多维数组我们只介绍二维数组。

二维数组的应用场景:

比如我们开发一个五子棋游戏,棋盘就是需要二维数组来表示。

 

二维数组的使用:

快速入门案例:
请用二维数组输出如下图形
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0

代码演示:

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)二维数组在内存的存在形式(重点)

 

func main()

  //定义/声明 二维数组
  var arr2 [2][3]int
  arr2[1][1] = 10
  fmt.Println(arr2)

  fmt.Printf("arr2[0]的地址%p \\n", &arr2[0])
  fmt.Printf("arr2[1]的地址%p \\n", &arr2[1])

  fmt.Printf("arr2[0][0]的地址%p \\n", &arr2[0][0])
  fmt.Printf("arr2[1][0]的地址%p \\n", &arr2[1][0])

打印的结果:

技术图片

 

 二维数组在内存的布局的示意图:

 技术图片

 

 使用方式2:直接初始化

  1)声明:var 数组名 [大小][大小]类型 = [大小][大小]类型初值..,初值..

  2)赋值(有默认值,比如int 类型的就是0)

  3)使用演示

  4)说明:二维数组在声明/定义时也对应有四种写法【和一维数组类似】

  var 数组名 [大小][大小]类型 = [大小][大小]类型初值..,初值..
  var 数组名 [大小][大小]类型 = [...][大小]类型初值..,初值..
  var 数组名 = [大小][大小]类型初值..,初值..
  var 数组名 = [...][大小]类型初值..,初值..


func main()

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

 

二维数组的遍历:

1)双层for循环完成遍历

案例演示:

func main()

  var arr3 = [2][3]int1,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()
  

2)for-range 方式完成遍历

案例演示:

func main()

  var arr3 = [2][3]int1,2,3,4,5,6

  //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)

以上是关于排序和查找3的主要内容,如果未能解决你的问题,请参考以下文章

数组的查找和排序方法

排序和查找3

Java习题(选择,冒泡排序,折半查找)

选择排序和冒泡排序以及折半查找

c++ 排序和查找

数组以及排序和查找