// 分治算法
// 不断地等分数组中的元素,直至各个分组中元素的个数 ≤2。由于每个分组内的元素最多有 2 个,
// 很容易就可以找出其中的最值(最大值或最小值),然后这些最值再进行两两比较,最终找到的最值就是整个数组中的最值.
package main
import "fmt"
func getMaxMin(arr[] int, left int, right int)(int,int){
var max_left,max_right,min_left,min_right int = 0,0,0,0
var middle int = 0
var max,min int
//数组不存在
if arr == nil {
return -1,-1
}
//如果查找的数组只有一个元素
if right - left == 0 {
max = arr[left]
min = arr[left]
return max,min
}
//如果查找数组只有两个元素,直接比较即可
if right -left <=1 {
if arr[left] >= arr[right]{
max = arr[left]
min = arr[right]
return max,min
}
max = arr[right]
min = arr[left]
return max,min
}
//多于2个元素
middle = (right-left)/2+left
max_left,min_left=getMaxMin(arr,left,middle)
max_right,min_right=getMaxMin(arr,middle+1,right)
if max_left > max_right{
max = max_left
}else{
max = max_right
}
if min_left < min_right{
min = min_left
}else{
min = min_right
}
return max,min
}
func main(){
var a,m,n int
fmt.Printf("请输入您要查找的数组长度:")
fmt.Scan(&a)
var b = make([]int,a)
for i:=0;i<a;i++ {
fmt.Printf("请输入数组的第%d个元素:",i)
fmt.Scan(&b[i])
}
fmt.Printf("您输入的数组是:%d\n",b)
m,n = getMaxMin(b,0,len(b)-1)
fmt.Printf("您输入数组的最大值是:%d,最小值是:%d\n",m,n)
}
【算法】【分治算法】找数组的最大值和最小值
于 2022-07-13 10:12:37 首次发布