练习题
//go规定大写的方法名才能被导入
//随机生成10个整数(1-100的范围)保存到数组,
// 并倒序打印 求平均值、最大值和最大值的下标、并查找里面是否有55
代码:
package hmoework
import (
"fmt"
"math/rand"
"time"
)
//倒序打印方法
func ReservArr(arr *[9]int) {
for i := 0; i < (len(arr) - 1 - i); i++ {
temp := arr[i]
arr[i] = (arr)[len(arr)-1-i]
(arr)[len(arr)-1-i] = temp
}
//第i坐标上的元素与倒数第i个坐标的元素进行交换
}
//冒泡排序(从小到大)
func bubble_sort1(arr [9]int) (max int) {
for j := 1; j < len(arr)-1; j++ {
for i := 0; i < len(arr)-j; i++ {
if (arr)[i] > (arr)[i+1] {
temp := (arr)[i]
(arr)[i] = (arr)[i+1]
(arr)[i+1] = temp
}
}
}
// fmt.Printf("冒泡排序(从小到大):%v\n", *arr)
// fmt.Printf("最大值为:%v", (*arr)[len(*arr)-1])
max = (arr)[len(arr)-1]
return max
}
// 查找最大值下标
// 二分查找
func find_max_maxindex(arr *[9]int, leftindex int, rightindex int, findvalue int) {
if leftindex > rightindex {
fmt.Println("没找到")
return
// return
}
mid := (leftindex + rightindex) / 2
if (*arr)[mid] > findvalue {
find_max_maxindex(arr, leftindex, mid-1, findvalue)
} else if (*arr)[mid] < findvalue {
find_max_maxindex(arr, mid+1, rightindex, findvalue)
} else {
fmt.Printf("找到了%v,下标为%v", findvalue, mid)
}
}
func Work1() {
//go规定大写的方法名才能被导入
//随机生成10个整数(1-100的范围)保存到数组,
// 并倒序打印 求平均值、最大值和最大值的下标、并查找里面是否有55
rand.Seed(time.Now().UnixNano())
var arr [9]int
for i := 0; i < len(arr); i++ {
arr[i] = rand.Intn(10)
}
fmt.Println("交换前arr=", arr)
bubble_sort1(arr) //排序 返回最大值 此处只进行值拷贝 不然最大值坐标永远为len(arr)-1
max := bubble_sort1(arr)
//获取最大值后进入二分查找方法,找到原数组中最大值的下标
for i, v := range arr {
if v == max {
fmt.Printf("最大值为%v,坐标为%v", v, i)
}
}
//计算出最大值和最大值坐标后再使用指针进行数组倒序显示
ReservArr(&arr)
fmt.Println("\n交换后arr=", arr)
fmt.Println(arr)
//使用二分查找数组里是否有55
find_max_maxindex(&arr, 0, len(arr)-1, 5)
}
浙公网安备 33010602011771号