一,思路:
1.编写一个冒泡排序的函数,传如一个切片,返回一个切片(排序后)
2.编写一个二分查找的函数,传参为一个切片,一个左边下标,一个右边下标,一个要查找的数
3.在主函数内创建一个切片,分别调用冒泡函数和二分函数
二,代码:
package main
import (
"fmt"
"math/rand"
"time"
)
/*
随机生成10个整数(1-100),使用冒泡排序进行排序,然后用二分查找法查找是否有90这个数,
并显示下标,如果没有则提示“找不到该数”。
*/
func bubbleSort(arr []int) []int {
temp := 0
for k := 0; k < len(arr)-1; k++ {
for i := 0; i < len(arr)-1-k; i++ {
if arr[i] > arr[i+1] {
temp = arr[i]
arr[i] = arr[i+1]
arr[i+1] = temp
}
}
}
return arr
}
func finary(arr []int, leftIndex, rightIndex, target int) {
midIndex := (leftIndex + rightIndex) / 2
if rightIndex < leftIndex {
fmt.Println("找不到该数")
return
}
if target > arr[midIndex] {
//如果要找的数大于中间的数,说明要找的数在右边,范围应该从中间开始往右缩小
finary(arr, midIndex+1, rightIndex, target)
} else if target < arr[midIndex] {
//如果要找的数小于中间的数,说明要找的数在左边,范围应该从中间开始往左缩小
finary(arr, leftIndex, midIndex-1, target)
} else {
fmt.Println("该数存在,下标为:", midIndex)
}
}
func main() {
var arr = make([]int, 10) //使用make创建一个切片并初始化切片
rand.Seed(time.Now().UnixNano())
for i := 0; i < 10; i++ {
arr[i] = rand.Intn(100) + 1
}
fmt.Println(arr)
arr = bubbleSort(arr) //调用bubbleSort函数并将返回值重新赋给原切片
fmt.Println(arr)
finary(arr, 0, len(arr)-1, 90) //调用二分查找函数,传入切片,左右下标,要查找的数
}
三,效果: