首页 > 技术文章 > 如何取出一个列表最大的前几位数

yzhch 2018-08-03 12:31 原文

如何取出一个列表最大的前几位数,传统的做法是先对这个数组进行冒泡排序法,然后取出前几位即可。

但是冒泡排序最大的问题就是循环次数太多,有没有什么办法只循环一次就可以的呢。

如下这个代码就是只循环一次数组,就完成了判断。其实本质上也是冒泡排序,只是冒泡的,不是原始数组,而是存放最大值的数组。

什么意思,先看看代码:

 

package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")

	var maxNums [3]int
	var nums []int = []int{1, 123, 8, 9, 10, 2, 33, 1, 0, 2, 44, 91, 2, 12, 446, 8, 2, 34, 6, 228}

	for _, n := range nums {
		for i := 0; i < 3; i++ {
			if n > maxNums[i] {
				for l:=2; l > i; l-- {
					maxNums[l] = maxNums[l-1]
				}
				maxNums[i] = n
				//fmt.Println(i, "=>", n)
				break
			}
		}
	}
	
	fmt.Println(maxNums)
}

  

也就是说,先定义一个存放最大值的数组列表,然后每次在需要往数组里面放最大值的时候,再对该数组进行冒泡排序,保证放进去的数字,都是按照大小排序的当前所知的最大数字。

* 这样和直接对原始数组进行冒泡排序有几个好处:

- 仅仅当需要进行冒泡排序的数字,才会进入冒泡排序循环,效率更高。

- 如果原始数据是某些列表对象,不需要在排序之前,把要排序的原始数据从列表对象中读取出来,节省了代码。

推荐阅读