java實(shí)現(xiàn)數(shù)組倒序 一道java面試題,20億數(shù)字的文本排序,如何取前100?
一道java面試題,20億數(shù)字的文本排序,如何取前100?因?yàn)檫@是一個(gè)Java問題,所以這是典型的TOPK問題。首先取前100個(gè)數(shù)字構(gòu)建一個(gè)最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時(shí)調(diào)整堆。堆中最
一道java面試題,20億數(shù)字的文本排序,如何取前100?
因?yàn)檫@是一個(gè)Java問題,所以這是典型的TOPK問題。首先取前100個(gè)數(shù)字構(gòu)建一個(gè)最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時(shí)調(diào)整堆。堆中最后100個(gè)元素就是結(jié)果??臻g復(fù)雜度為k,時(shí)間復(fù)雜度為nlogk
在以前的JDK7版本中,sort()的實(shí)現(xiàn)原理是:基本類型使用優(yōu)化的快速排序,其他類型使用優(yōu)化的合并排序。在JDK7之后,排序策略被修改:如果設(shè)置了JVM啟動(dòng)參數(shù)-Djava.util.Arrays文件.useLegacyMergeSort=true則將執(zhí)行上述排序策略(優(yōu)化合并排序),否則將執(zhí)行timsort。