大数据量求topN(1*10^8个数 求top10)
/**
* 获取topN
*
* @param n
*/
def getTopN(n: Int): Array[Int] = {
val random = new Random()
val array = new Array[Int](n)
for (i <- 1 to 100000000) {
val item = random.nextInt(100000000)
if (item < array(n - 1)) bubble(array) else insert(item, array)
}
array
}
/**
* 冒泡排序(倒序)
*
* @param array
* @return
*/
def bubble(array: Array[Int]): Unit = {
for (i <- array.indices) {
for (j <- 0 until array.length - i - 1) {
if (array(j) < array(j + 1)) {
array(j) = array(j) ^ array(j + 1)
array(j + 1) = array(j) ^ array(j + 1)
array(j) = array(j) ^ array(j + 1)
}
}
}
}
/**
* 插入
*
* @param item
* @param array
* @return
*/
def insert(item: Int, array: Array[Int]): Unit = {
var index = 0
for (x <- 1 until array.length) {
if (item > array(x) && item <= array(x - 1)) index = x
}
for (x <- (index until array.length - 1).reverse) {
array(x + 1) = array(x)
}
array(index) = item
}