vb桶排序算法 一道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
算法需要長期的積累和熟悉。
對(duì)于計(jì)算機(jī)軟件開發(fā)專業(yè)人士來說,算法極其重要,熟悉和掌握常用的算法,對(duì)理解問題、解決問題非常重要。
那么,如何更有效地掌握常用算法呢?現(xiàn)在讓我談?wù)勎易约旱目捶ā?/p>
首先,找到有趣的點(diǎn)并查看更多。
在學(xué)習(xí)算法之初,學(xué)生總是感到枯燥乏味,沒有任何實(shí)際應(yīng)用指導(dǎo),對(duì)持續(xù)深入的學(xué)習(xí)不感興趣。漸漸地,他們忘記了所學(xué)的所有算法,更不用說掌握了。
解決方法是:堅(jiān)持看,多看,看這個(gè)算法在實(shí)際應(yīng)用中的例子。所以你不會(huì)覺得算法很無聊。
第二,練習(xí)和理解。
沒有實(shí)踐的支持,理論總是模糊不清的。每次學(xué)習(xí)算法時(shí),都必須用自己的編程語言來實(shí)現(xiàn)。當(dāng)你能用編程語言實(shí)現(xiàn)一些算法時(shí),你就會(huì)有成就感!同時(shí),你也很自然地理解了算法的思想,即掌握了算法。
第三,多學(xué)習(xí)別人的算法講解,仔細(xì)分析別人的想法。
總之,算法是一門很重要的課程,也是一門很有意思的課程,祝你在學(xué)習(xí)的路上,有興趣找樂子
作為計(jì)算機(jī)專業(yè)的學(xué)生,算法很差,該怎么提升?
氣泡排序算法時(shí)間復(fù)雜度,O(n^2)氣泡排序?qū)崿F(xiàn)如下:首先,將所有要排序的數(shù)字放入工作列表。
從列表中的第一個(gè)數(shù)字到倒數(shù)第二個(gè)數(shù)字,逐一檢查:如果某個(gè)位上的數(shù)字大于下一個(gè)數(shù)字,則會(huì)與其下一個(gè)數(shù)字交換。
重復(fù)步驟2,直到無法再更換。
冒泡排序的平均時(shí)間復(fù)雜度與插入排序的平均時(shí)間復(fù)雜度相同,也是平方級(jí),但也很容易實(shí)現(xiàn)。
選擇排序選擇排序?qū)崿F(xiàn)如下:在數(shù)組內(nèi)存中設(shè)置n個(gè)要排序的數(shù)字,數(shù)組下標(biāo)從1開始,到n結(jié)束。
從數(shù)組的第I個(gè)元素到第n個(gè)元素,I=1,找到最小的元素。
將上一步中找到的最小元素與第i個(gè)元素交換。
如果I=n-1,則算法結(jié)束,否則,排序的平均時(shí)間復(fù)雜度為O(n^2)。
數(shù)組快速排序時(shí)間復(fù)雜度?
快速排序方法的時(shí)間復(fù)雜度為nlogn(n×以2為底的對(duì)數(shù))
擴(kuò)展:
快速排序是對(duì)冒泡排序的改進(jìn)。
快速分揀是由C.A.R.Hoare在1962年提出的。它的基本思想是用一步排序法將要排序的數(shù)據(jù)分成兩個(gè)獨(dú)立的部分,其中一部分的數(shù)據(jù)比另一部分的數(shù)據(jù)小。然后根據(jù)該方法對(duì)兩部分?jǐn)?shù)據(jù)進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,從而使整個(gè)數(shù)據(jù)成為一個(gè)有序的序列。
各種排序方法的時(shí)間復(fù)雜度如下: