我們前面學習的插入、歸併、堆和快速排序都是比較排序,即在排序的最終結果中,各元素的次序依賴於它們之間的比較。我們說過比較排序有時間下界,即nlgn,如果我們需要乙個時間複雜度為o(n)的排序演算法,要怎麼辦?
計數排序就是比較好的選擇。計數排序的基本思想是:對每乙個輸入的元素x,確定小於x的元素個數。利用這一資訊可以直接把x放到它的輸出陣列中的位置上。
這就要求我們需要很大的空間去儲存臨時變數。假設對於有n個元素的陣列,每乙個元素都是在0到k區間內的乙個整數,並需要乙個與輸入陣列一樣大的輸出陣列。
void count_sort(int *a,int *b,int n,int k)
; //count the element nums
for(int i=0;i1;
for(int i=1;i1];
for(int i=n-1;i>=0;i--)
}
我們可以看成計數排序的時間複雜度是o(n),但是空間複雜度是o(n+k)。
以空間換時間經典演算法
以前看過一篇文章 優化c 常用的幾招 作者提到的第一招就是 以空間換時間 還舉了乙個例子,由於比較經典,引用一下 電腦程式中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程式的效率問題,我們就有了解決問題的第1招 以空間換時間。比如說字串的賦值 方法a 通常的辦法 define l...
以時間換空間,聯合主鍵 舉例
在建立資料庫是,以空間換時間應該怎麼理解呢,舉例 建設你要建立乙個商品的資料庫,肯定要有乙個商品表goods,這個商品有喝多宣傳,那肯定還要有乙個表goods image表,而且乙個 商品可以對應很多,所以是一對多的關係 但是這個商品有乙個主宣傳,那麼如果將主 宣傳也新增到goods image的表...
劍指offer 以空間換時間練習
1 題目要求 我們把只包含因子2 3 5的數稱作醜數,求按從小到大的順序的第1500個醜數。例如,6 8都是醜數,但14不是,因為它包含因子7.習慣上我們把1當做第乙個醜數。2 題目分析 方法一 首先,我們再來仔細分析一下醜數的概念,因為2,3,5是醜數的因子,那麼就可以說明任意乙個醜數對其中乙個因...