【算法】【分治算法】找数组的最大值和最小值

// 分治算法
// 不断地等分数组中的元素,直至各个分组中元素的个数 ≤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)
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值