Golang二分查找

风格1:

package main


import (
	"fmt"
)

func BinarySort(arr *[]int, leftIndex, rightIndex, findVal int){
	// 判断leftIndex是否大于rightIndex
	if leftIndex > rightIndex{
		fmt.Println("找不到")
		return
	}
	// 先找到中间的下标
	middle := (leftIndex+rightIndex)/2
	
	if (*arr)[middle] > findVal{
		// 说明我们要找的数,应该在leftIndex---middle-1
		BinarySort(arr, leftIndex, middle-1, findVal)
	}else if (*arr)[middle] < findVal{
		// 说明我们要找的数,应该在middle+1---rightIndex
		BinarySort(arr, middle+1, rightIndex, findVal)
	}else{
		// 找到了
		fmt.Printf("找到了,下标为%v\n", middle)
	}
}

func main(){
	slice := []int{24, 69, 80, 57, 13}
	BinarySort(&slice, 0, len(slice)-1, 80)

}

风格2:使用switch

package main

import (
	"fmt"
)

func BinarySort(arr *[]int, leftIndex, rightIndex, findVal int){
	// 判断leftIndex是否大于rightIndex
	if leftIndex > rightIndex{
		fmt.Println("找不到")
		return
	}

	// 先找到中间的下标
	switch middle := (leftIndex+rightIndex)/2; {

		case (*arr)[middle] > findVal:
			// 说明我们要找的数,应该在leftIndex---middle-1
			BinarySort(arr, leftIndex, middle-1, findVal)
		case (*arr)[middle] < findVal:
			// 说明我们要找的数,应该在middle+1---rightIndex
			BinarySort(arr, middle+1, rightIndex, findVal)
		default:
			// 找到了
			fmt.Printf("找到了,下标为%v\n", middle)
	}
}

func main(){
	slice := []int{24, 69, 80, 57, 13}
	BinarySort(&slice, 0, len(slice)-1, 80)
}
上一篇:Java 查找算法


下一篇:线性查找和二分查找