Go语言版top-k算法

网友投稿 764 2022-11-18

Go语言版top-k算法

Go语言版top-k算法

Go语言版top-k算法

​​1、名词解释​​​​2、递归​​​​3、top-2​​

1、名词解释

在数组中找出最大的​​k​​个数出来

如:​​1​​​,​​3​​​,​​8​​​,​​6​​​,​​7​​​,​​5​​​,​​3​​​,​​2​​​,​​12​​​,​​38​​​,​​23​​​ 在这个数组中找出最大的​​2​​个数出来

思路:如5个数,先取5个数,然后将5个数进行折半排序,剩下的元素进行循环,与里面的数据进行插入排序,思路:先取中间数据与循环中的数据进行比较,然后取出数据进行比较,循环结束,5个数取出

目前两个数的如下循环处理方式:

思路:取出两个数据进行排序,剩下的,如果大于当前的右边的数据则进行替代右边的,如果大于左边的替换左边的

/**** 循环使用取出最大k值 */func numSort1(ss []int) []int { kk := ss[:2] var t int if kk[0] > kk[1] { t = kk[0] kk[0] = kk[1] kk[1] = t } for _,v := range ss[2:] { if v > kk[1] { kk[0] = kk[1] kk[1] = v } else if v >= kk[0] { kk[0] = v } } return kk}

2、递归

思路同上,需要递归的时候进行递归循环测试,如第一次循环的数值,第二个,最后一个的值是否能打印。避免死循环

func numSort2(ss []int, n,min, max int) (int, int) { len := len(ss) if (n == 0) { min = 0 max = ss[n:1][0] return numSort2(ss, n+1, min, max) } else if(n < len) { v := ss[n:n+1][0] if v > max { min = max max = v } else if v > min { min = v } return numSort2(ss, n+1, min, max) } return min,max}

3、top-2

package mainimport "fmt"func main() { var ss []int ss = append(ss, 9,5,3,8,11,13,21,29,17,9,15,28,26,51,22) //ss = ss[2:] min,max := numSort2(ss, 0,0, 0)//递归 fmt.Println(min,max) kk := numSort1(ss)//循环 fmt.Println(kk)}/**** 循环使用取出最大k值 */func numSort1(ss []int) []int { kk := ss[:2] var t int if kk[0] > kk[1] { t = kk[0] kk[0] = kk[1] kk[1] = t } for _,v := range ss[2:] { if v > kk[1] { kk[0] = kk[1] kk[1] = v } else if v >= kk[0] { kk[0] = v } } return kk}/**** 递归取出最大k值 */func numSort2(ss []int, n,min, max int) (int, int) { len := len(ss) if (n == 0) { min = 0 max = ss[n:1][0] return numSort2(ss, n+1, min, max) } else if(n < len) { v := ss[n:n+1][0] if v > max { min = max max = v } else if v > min { min = v } return numSort2(ss, n+1, min, max) } return min,max}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IDEA&nbsp;的基本介绍使用及断点调试技巧
下一篇:3 Linux文件和目录管理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~