遇见go语言的第五天——排序、数组

一、排序

冒泡排序

func Bubble(arr *[10]int)  {
	for j:= 1;j<(len(arr)-1);j++{
		for i:=1 ;i<len(arr);i++{
			if arr[i] < arr[i-1]{
				temp := 0
				temp = arr[i-1]
				arr[i-1] = arr[i]
				arr[i] = temp
			}
		}
	}
	fmt.Println(*arr)
}
func main()  {
	arr := [10]int{12,85,96,45,62,9,27,31,55,77}
	Bubble(&arr)
}

二、查找

顺序查找
实例一:有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王
猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称

  • 方式一
func main()  {
	arr := [4]string{"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"}
	var a string
	fmt.Print("任意输入一个名称:")
	fmt.Scanln(&a)
	for i := 0;i<len(arr);i++{
		if a == arr[i]{
			fmt.Printf("猜对啦,就是%s",a)
			break
		}else if i == len(arr) - 1 {
			fmt.Println("猜错啦")
		}
	}
}
  • 方法二
func main()  {
	arr := [4]string{"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"}
	var a string
	fmt.Print("任意输入一个名称:")
	fmt.Scanln(&a)
	index := -1
	for i := 0;i<len(arr);i++{
		if a == arr[i]{
			index = i
			break
		}
	}
	if index != -1{
		fmt.Printf("猜对啦,就是%s",a)
	}else {
		fmt.Printf("猜错啦")
	}
}

二分法查找

func BinaryFind(arr *[6]int,leftindex int,rightindex int,number int)  {
	middle := (rightindex + leftindex)/2
	if leftindex > rightindex{
		fmt.Println("找不到")
		return
	}
	if (*arr)[middle] > number{
		BinaryFind(arr,leftindex,middle-1,number)
	}else if (*arr)[middle] < number{
		BinaryFind(arr,middle+1,rightindex,number)
	}else {
		fmt.Println("找到啦")
	}
}
func main()  {
	arr := [6]int{11,22,33,44,55,66}
	leftindex := 0
	rightindex := 5
	var number int
	fmt.Print("请输入要查找的数:")
	fmt.Scanln(&number)
	BinaryFind(&arr,leftindex,rightindex,number)
}

三、二维数组

  • 二维数组的定义
func main()  {
	var a [4][6]int
	a[1][2] = 1
	a[2][1] = 2
	a[2][3] = 3
	for i := 0;i < 4;i++{
		for j := 0;j < 6 ;j++  {
			fmt.Print(a[i][j],"  ")
		}
		fmt.Println()
	}

	var a1 = [2][3]int{{1,2,3},{4,5,6}}
	fmt.Println(a1)
}
  • 二维数组的遍历
//for循环遍历
	for i := 0;i<len(a1);i++{
		for j := 0;j<len(a1[i]);j++{
			fmt.Print(a1[i][j])
		}
		fmt.Println()
	}
	//for-range来遍历
	for i,v1 := range a1{
		for j,v2 := range v1{
			fmt.Printf("a1[%v][%v] = %v\n",i,j,v2)
		}
	}
  • 二维数组实例:定义一个二维数组,用于保存三个班,每个班五名同学的成绩,并求出每个班级品均分。以及所有班级平均分
func main(){
	var scores [3][5]float64
	for i := 0;i < 3;i++{
		for j := 0;j < 5 ;j++  {
			fmt.Printf("请输入%d班第%d名同学的成绩:",i+1,j+1)
			fmt.Scanln(&scores[i][j])
		}
	}
	fmt.Println(scores)
	Sum := 0.0
	for i := 0;i < len(scores);i++{
		sum := 0.0
		for j := 0;j < len(scores[i]) ;j++  {
			sum = sum + scores[i][j]
			Sum = Sum + scores[i][j]
		}
		fmt.Printf("%d班的总分为%v\n",i+1,sum)
		average := sum / float64(len(scores[i]))
		fmt.Printf("%d班的平均分为%v\n",i+1,average)
	}
	fmt.Printf("三个班级的总分为%v\n",Sum)
	Average := Sum / 15
	fmt.Printf("三个班级的平均分为%v\n",Average)
}
  • 随机生成10个整数(1-100)保存到数组并倒叙打印以及求平均值、求最大值和最大值下标、并查找里面是否有55
func main()  {
	var a [10]int
	rand.Seed(time.Now().UnixNano())
	for i := 0 ;i < len(a);i++   {
		a[i] = rand.Intn(100)
	}
	temp := 0
	for j := 1;j < (len(a)-1) ;j++  {
		for i := 1;i < len(a);i++ {
			if a[i] > a[i-1] {
				temp = a[i-1]
				a[i-1] = a[i]
				a[i] = temp
			}
		}
	}
	fmt.Println(a)
	sum := 0
	for i := 0;i < len(a) ;i++  {
		sum += a[i]
	}
	average := sum / 10
	fmt.Printf("这10个数的总和为%d,平均数为%v\n",sum,average)
	fmt.Printf("最大值为%d,其下标为0\n",a[0])
	for i := 0;i < len(a);i++{
		if a[i] == 55{
			fmt.Printf("该数组有55,其下标为%d\n",i)
		}else {
			fmt.Printf("该数组没有55\n")
			break
		}
	}
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页