一、排序
冒泡排序
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
}
}
}