java實(shí)現(xià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
氣泡排序是一種經(jīng)典的排序算法。代碼如下:for(int i=1I&長時(shí)間){對于(int=“”j=”1j&L排列長度-原則:比較兩個(gè)相鄰的元素,將值大的元素交換到右邊。=“”思路:依次比較兩個(gè)相鄰的數(shù)字,小數(shù)點(diǎn)放在前面,大數(shù)放在后面。也就是說,在第一遍:首先,比較第一和第二個(gè)數(shù)字,把小數(shù)放在前面,把大的數(shù)字放在后面。然后比較第二個(gè)數(shù)和第三個(gè)數(shù),把小數(shù)放在大數(shù)之前,依此類推,直到最后兩個(gè)數(shù)比較,把小數(shù)放在大數(shù)之前。重復(fù)第一步,直到完成所有排序。=“”第一次比較后,最后一個(gè)數(shù)字必須是數(shù)組中最大的數(shù)字,因此最后一個(gè)數(shù)字不參與第二次比較;=“”第二次比較后,倒數(shù)第二個(gè)數(shù)字也必須是數(shù)組中第二大的數(shù)字,因此最后兩個(gè)數(shù)字不參與第三次比較;=“”以此類推,每次傳遞的比較數(shù)為-1;=“”=“”示例:對數(shù)組排序:int[]=“”arr=“{6,3,8,2,9,1}”I=”1I&長時(shí)間){“:氣泡排序原則=”“>