java遞歸 一道java面試題,20億數(shù)字的文本排序,如何取前100?
一道java面試題,20億數(shù)字的文本排序,如何取前100?既然是java題,這就是經(jīng)典的topk問題。先取前100個數(shù),建立一個最小堆,剩下的數(shù)依次從堆頂插入元素,同時調(diào)整堆。最后堆中的100個元素即
一道java面試題,20億數(shù)字的文本排序,如何取前100?
既然是java題,這就是經(jīng)典的topk問題。先取前100個數(shù),建立一個最小堆,剩下的數(shù)依次從堆頂插入元素,同時調(diào)整堆。最后堆中的100個元素即為結(jié)果??臻g復(fù)雜度為k,時間復(fù)雜度為nlogk
java如何實現(xiàn)快速排序?
快速排序的原理:選擇一個關(guān)鍵值作為基準值。比基準值小的都在左邊序列(一般是無序的),比基準值大的都在右邊(一般是無序的)。一般選擇序列的第一個元素。
一次循環(huán):從后往前比較,用基準值和最后一個值比較,如果比基準值小的交換位置,如果沒有繼續(xù)比較下一個,直到找到第一個比基準值小的值才交換。找到這個值之后,又從前往后開始比較,如果有比基準值大的,交換位置,如果沒有繼續(xù)比較下一個,直到找到第一個比基準值大的值才交換。直到從前往后的比較索引>從后往前比較的索引,結(jié)束第一次循環(huán),此時,對于基準值來說,左右兩邊就是有序的了。
接著分別比較左右兩邊的序列,重復(fù)上述的循環(huán)。