成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

公認(rèn)最好的排序算法 一道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

排序算法有:冒泡排序-O(n^2)雞尾酒排序-O(n^2)插入排序-O(n^2)桶排序-O(n)O(k)計(jì)數(shù)排序-O(n k)O(n k)O(n k)合并排序-O(NLog n)需要O(n)額外空間合并排序-O(n^2)二叉樹排序-O(NLog n)期望時(shí)間;O(n^2)最差時(shí)間時(shí)間;鴿子洞排序-O(nk)需要O(k)額外的空間

這個(gè)問題的最佳時(shí)間復(fù)雜度是O(n)。所以如果一定要使用排序算法,如果標(biāo)題條件允許,請盡量選擇o(n)排序算法如bucket排序。另一種解決方案是構(gòu)建一個(gè)大小為10的堆,按順序遍歷數(shù)組,并在堆滿時(shí)移除最上面的元素。這樣,最多可獲得10個(gè)元素。時(shí)間復(fù)雜度為O(nlog10)。