【Golang】随机生成10个整数(1-100之间),使用冒泡排序法进行排序,然后使用二分查找法,查找是否有90这个数,并显示下标,如果没有则显示"找不到该数"

  一、题目要求  

    随机生成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)
}

  

上一篇:剑指Offer:[第4天 查找算法(简单)]--->0~n-1中缺失的数字


下一篇:PHPCMS v9权限设置,完美解决