演算法面試題之對n個數排序

2021-06-28 04:38:30 字數 710 閱讀 8790

a檔案中最多有n個正整數,而且每個數均小於n,n <=10的七次方。不會出現重複的數。要求對a檔案中的數進行排序,可用記憶體為1m,磁碟可用空間足夠。

演算法面試題之統計詞頻前k大

中的基於檔案的歸併排序演算法顯然是可以秒殺的,但是不是很好寫,這道題目強調了每個數字都小於10^7,而且不會出現重複的數字,又給了1m的記憶體,因此必然是想讓我們用乙個其他的演算法去搞定他,怎麼搞定呢?我們來看題目裡面出現的不和諧的描述!

不會出現

重複的數字,每個

數字都小於10^7

,1m記憶體

這對我們來說是非常有價值的資訊,首先從1m記憶體來入手,1m記憶體可以幹什麼呢?開乙個12萬大小的int陣列,或者100萬大小的bool陣列,100萬剛好等於10^7,因此,走這個思路是非常有可能正確的!

其次來考慮最後乙個條件,不會出現重複的數字,這樣一來,對於每個數字,不就僅僅是出現和沒有出現過兩種情況了麼?也就是bool型別所表示的0或者1!因此,我們只需要順序讀入一遍,記錄每個數字是否出現過,然後按順序輸出出現過的數字即可。

至此,此題已經可以解決了,其實這不是別的,就是最基礎的統計排序。

bool vis[1000001],x;

for (int i=1;i<=n;i++)

for (int i=1;i<=n;i++)

if (vis[x]==1)

cout<

面試題之 常用排序演算法

以下排序預設排序效果是從小到大,待排序序列 3,4,63,4,9,0,1,32,2 基本思想 依次交換相鄰兩個元素,使得大的資料往下沉 或小的資料往上附浮 第一步 比較相鄰的兩個元素,如果前者比後者大,則交換兩元素。否則,不交換。第二步 重複第一步直到最後兩個元素比較完成,此時,最大的元素已經在最後...

面試題之(氣泡排序)

什麼是氣泡排序呢?其原理就是依次比較相鄰的兩個值,如果後面的比前面的小,則將小的排到前面。依照這個規則進行多次並且遞減的迭代,直到順序正確。請看下面引用網上的動態圖可以更直觀的了解氣泡排序的乙個工作原理 請看下面的 是如何實現的氣泡排序 var examplearr 2,3,1,5,4 functi...

面試題10 1 n中1的個數

參考博文 主要就是從數字出發找規律。一 1的數目 程式設計之美上給出的規律 1.如果第i位 自右至左,從1開始標號 上的數字為0,則第i位可能出現1的次數由更高位決定 若沒有高位,視高位為0 等於更高位數字x當前位數的權重10i 1。2.如果第i位上的數字為1,則第i位上可能出現1的次數不僅受更高位...