一、题目要求
随机生成10个整数(1-100之间),使用冒泡排序法进行排序,然后使用二分查找法,查找是否有90这个数,并显示下标,如果没有则显示"找不到该数"
二、代码实现
这是升序冒泡排列,然后二分法查找指定值90
package main import ( "fmt" "math/rand" "time" ) //随机生成10个整数(1-100之间),使用冒泡排序法进行排序,然后使用二分查找法,查找是否有90这个数,并显示下标,如果没有则显示"找不到该数" func randNum() (arr [10]int) { rand.Seed(time.Now().UnixNano()) for j := 0; j < 10; j++ { //将随机数赋值 arr[j] = rand.Intn(101) //循环j-1次,判断arr[K]是否等于arr[j],如果等于,则重新取随机数给arr[j] loop: for k := 0; k < j; k++ { if arr[k] == arr[j] { arr[j] = rand.Intn(101) goto loop } } } return } func bubleSort(arr *[10]int) { for i := 0; i < 10; i++ { flag := false for j := 0; j < 10-i-1; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] flag = true } } if !flag { break } } return } func findNum(arr *[10]int, leftIndex, rightIndex, findVal int) { if arr == nil { return } if leftIndex > rightIndex { fmt.Println("找不到") return } middle := (leftIndex + rightIndex) / 2 if arr[middle] > findVal { findNum(arr, leftIndex, middle-1, findVal) } else if arr[middle] < findVal { findNum(arr, middle+1, rightIndex, findVal) } else { fmt.Println("找到了,下标是:", middle) } } func main() { var arr = randNum() fmt.Println(arr) bubleSort(&arr) fmt.Println(arr) findNum(&arr, 0, 9, 90) }
以下是降序冒泡排序,用二分法查找指定值90
package main import ( "fmt" "math/rand" "time" ) //随机生成10个随机数(1-100) func randNum() (arr [10]int) { rand.Seed(time.Now().UnixNano()) for j := 0; j < 10; j++ { arr[j] = rand.Intn(101) loop: for k := 0; k < j; k++ { if arr[k] == arr[j] { arr[j] = rand.Intn(101) goto loop } } } return } //冒泡降序排序 func bubleSortDown(arr *[10]int) { for j := 0; j < len(arr); j++ { flag := false for k := 0; k < len(arr)-j-1; k++ { if arr[k] < arr[k+1] { arr[k], arr[k+1] = arr[k+1], arr[k] flag = true } } if !flag { break } } } //使用二分找到90,如果有输出下标 func binarySearch(arr *[10]int, leftIndex, rightIndex, findVal int) { if leftIndex > rightIndex { fmt.Printf("找不到%v这个数。\n", findVal) return } middle := (leftIndex + rightIndex) / 2 if arr[middle] > findVal { binarySearch(arr, middle+1, rightIndex, findVal) } else if arr[middle] < findVal { binarySearch(arr, leftIndex, middle-1, findVal) } else { fmt.Println("找到了,下标是:", middle) return } } func main() { var arr [10]int = randNum() bubleSortDown(&arr) binarySearch(&arr, 0, len(arr)-1, 90) }