如何在幾秒中之內給接近百萬個10位數排序

2021-08-09 03:56:51 字數 943 閱讀 9312

此題目並不是乙個新鮮事物,而是很常見的需求,試想一下,聯通移動的資料量要遠遠大於我們今天所排序。但是我們平時用的時候基本上是感覺不到卡的,如果只用簡單的冒泡法,快排,是萬萬不可得,這樣做效率太慢了。此需求也是我在看完程式設計珠璣這本書之後,給我了啟發,隨著不斷的除錯,寫出了最後的源**。

那麼程式設計珠璣裡對這種需求的思想是什麼呢,當我們第一次拿到需求的時候,我們第一反應是要把資料從檔案中讀出來 ,放到記憶體裡,然後在排序。當然了,這是最後最笨的方式了。這麼大的資料量我們是不可能把資料全部拿到記憶體中去的。下面給出原始碼!

#include 

#include 

#include 

intmain(

intargc,

const

char

* argv)

printf

("sort done\n");

file

*fp=

fopen

("/users/yong/downloads/write.txt"

,"wb");

for(

long

i=0;i<10000000;i++) }

free

(ch);

fclose

(fp); }

本次排序的思想是什麼呢?,可以看出只有這麼幾行**,大家拷貝下來可以試試執行一下 ,執行時間就只有2秒多。部落格不能傳檔案好像,但是我看看能不能以形式傳上去。思想就是,我在堆區建立乙個1000000的空間。由於我要排序的檔案裡的數字都以1開頭,所以可以先把1去掉。排序之後再加上。我每次從檔案裡讀出一行的資料,我以char a[10]來儲存。大家想一想,這些數字是不是可以作為我們在堆區陣列的標號呢?,所以我們在每讀出乙個資料就把我們在堆區陣列的相應元素個數上標1,都讀完之後。我們把標1的陣列元素從陣列裡打出來。這就是本次的排序的思想。多看幾次就能明白裡面的貓膩,很有意思!與諸君分享!

Python如何在單元測試中給物件打補丁

問題 你寫的單元測試中需要給指定的物件打補丁,用來斷言它們在測試中的期望行為 比如,斷言被呼叫時的引數個數,訪問指定的屬性等 解決方案 unittest.mock.patch 函式可被用來解決這個問題。patch 還可被用作乙個裝飾器 上下文管理器或單獨使用,儘管並不常見。例如,下面是乙個將它當做裝...

如何在6 8小時之內讀完300頁的書?

該書的重要觀點 需要按順序讀,但對於非虛構類的書不需要從頭到尾按順序去閱讀,而是要跳讀 略讀 標記,對重點的地方還要仔細地讀。該文中重點介紹了10多條閱讀策略 1.記住要點 只需要記住並記錄下書中的幾個要點,根據這些資訊,如果以後需要可以查到詳細的內容。2.設定乙個閱讀時限 在讀一本書前,給自己設定...

如何在程式中延時

方法一 使用sleep函式,如延時2秒,用sleep 2000 方法二 使用sleep函式的不利在於延時期間不能處理其他的訊息,如果時間太長,就好象宕機一樣,利用coledatetime類和coledatetimespan類實現延時就不會出現那樣的問題 coledatetime start time...