Go---排序、二维数组

排序
排序是将一组数据,依指定的顺序进行排列的过程。
排序的分类:
  1) 内部排序:
     指将需要处理的所有数据都加载到内部存储器中进行排序。
     包括(交换式排序法、选择式排序法和插入式排序法);
  2) 外部排序法:
    数据量过大,无法全部加载到内存中,需要借助外部存储进行
    排序。包括(合并排序法和直接合并排序法)。

交换式排序法
交换式排序属于内部排序法,是运用数据值比较后,依判断规则对数据位置进行交换,以达到排序的目的。
 交换式排序法又可分为两种:
  1) 冒泡排序法(Bubble sort)
  2) 快速排序法(Quick sort)

冒泡排序(Bubble Sorting)

冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置-一个标志flag判断元素是否进行过交换。从而减少不必要的比较(优化)。

func bubbleSort(arr  *[6]int){

fmt.Println("排序之前:",(*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+1]

             (*arr)[j+1]=(*arr)[j]

             (*arr)[j]=temp

         }

    }

}

fmt.Println("排序之后:",(*arr))

}

    arr := [6]int{22,45,1,3,7,9}

    bubbleSort(&arr)

查找
在Golang中,我们常用的查找有两种:
 1) 顺序查找
 2) 二分查找(该数组是有序)

二分查找(该数组是有序)

package main

import (

    "fmt"

)

func BinaryFind(arr *[6]int,leftIndex int,rightIndex int,findVal int){

//中间下标为

middle := (leftIndex + rightIndex) / 2

  //leftIndex >rightIndex 就找不到了

 if leftIndex > rightIndex {

   fmt.Println("找不到")

   return

 }

 if (*arr)[middle] > findVal {

    //查找的数的区间在[leftIndex,middle-1]

      BinaryFind(arr,leftIndex,middle-1,findVal)

  } else if  (*arr)[middle] < findVal {

     //查找的数的区间在[leftIndex,middle-1]

      BinaryFind(arr,middle+1,rightIndex,findVal)

  }else{

      //找到了

      fmt.Printf("找到了%v,数组下标为%v \n",findVal,middle)

  }

}

func main(){

    arr2 := [6]int{0,1,3,7,9,11}

    BinaryFind(&arr2,0,len(arr2)-1,9)

}

二维数组

使用方式1: 先声明/定义 再赋值
1) 语法: var 数组名 [大小][大小]类型
2) 比如: var arr [2][3]int[][],再赋值。
3) 使用演示

   //定义

    var arr [3][3]int

    //赋值

    arr[1][1]=1

    arr[2][2]=2

    //遍历二维数组,按照要求输出图形

    for i:=0;i<3;i++{

        for j:=0;j<3;j++{

            fmt.Print(arr[i][j]," ")

        }

        fmt.Println()

    }

使用方式2: 直接初始化
1) 声明: var 数组名 [大小[大小]类型= [大小][大小]类型{{初值...},{初值...}}
2) 赋值(有默认值,比如int 类型的就是0)
3) 使用演示

    var arr3 = [2][2]int{{0,1},{5,6}}

    fmt.Println(arr3)

4)  说明:二维数组在声明/定义时也对应有四种写法[和一维数组类似]
      var 数组名 [大小][大小]类型= [大小][大小]类型{{初值},{初值}}
     var 数组名  [大小][大小]类型= [...][大小]类型{{初值},{初值.}}
     var  数组名 = [大小][大小]类型{{初值},{初值...}}
     var 数组名 =[...][大小]类型{{初值},{初值.}}

 二维数组的遍历

双层for循环完成遍历

var arr3 = [2][2]int{{0,1},{5,6}}

    for i:=0;i<len(arr3);i++{

        for j:=0;j<len(arr3[i]);j++{

            fmt.Print(arr3[i][j]," ")

        }

        fmt.Println()

    }

for-ange 方式完成遍历

var arr3 = [2][2]int{{0,1},{5,6}}

for i,v := range arr3 {

          for j,v2 := range v{

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

          }

          fmt.Println()

    }

//定义二维数组,用于保存三个班,每个班五名同学成绩

    //1.定义一个二维数组

    var scores [3][5]float64

    //2.接受输入成绩

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

        }

    }

   //3.打印,平均分,所有班级平均分

   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)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值