O n 時間的排序

2022-02-05 03:09:17 字數 701 閱讀 2555

題目:某公司有幾萬名員工,請完成乙個時間複雜度為o(n)的演算法對該公司員工的年齡作排序,可使用o(1)的輔助空間。

題目特別強調是對乙個公司的員工的年齡作排序。員工的數目雖然有幾萬人,但這幾萬員工的年齡卻只有幾十種可能。上班早的人一般也要等到將近二十歲才上班,一般人再晚到了六七十歲也不得不退休。

由於年齡總共只有幾十種可能,我們可以很方便地統計出每乙個年齡裡有多少名員工。舉個簡單的例子,假設總共有5個員工,他們的年齡分別是25、24、26、24、25。我們統計出他們的年齡,24歲的有兩個,25歲的也有兩個,26歲的乙個。那麼我們根據年齡排序的結果就是:24、24、25、25、26,即在表示年齡的陣列裡寫出兩個24、兩個25和乙個26。

想明白了這種思路,我們就可以寫出如下**:

void sortages(int ages, int length)

int index = 0;

for(int i = 0; i <= oldestage; ++ i)

}}

在上面的**中,允許的範圍是0到99歲。陣列timesofage用來統計每個年齡出現的次數。某個年齡出現了多少次,就在陣列ages裡設定幾次該年齡。這樣就相當於給陣列ages排序了。該方法用長度100的整數陣列輔助空間換來了o(n)的時間效率。由於不管對多少人的年齡作排序,輔助陣列的長度是固定的100個整數,因此它的空間複雜度是個常數,即o(1)。

O n 時間的排序 計數排序

題目 某公司有幾萬名員工,請完成乙個時間複雜度為 o n 的演算法對該公司員工的年齡作排序,可使用 o 1 的輔助空間。分析 排序是面試時經常被提及的一類題目,我們也熟悉其中很多種演算法,諸如插入排序 歸併排序 氣泡排序,快速排序等等。這些排序的演算法,要麼是 o n2 的,要麼是 o nlogn ...

線性時間排序

public void radixsort int a a k key 我們前面提到的方法,基本上都是比較排序,本篇介紹三種非比較型別的排序,計數排序 基數排序 桶排序,比較排序的最壞的情況都是經過nlgn的,線性排序的時間複雜度基本上都是線性關係。1.計數排序 計數排序不是通過元素之間的比較,而是...

線性時間排序

在最壞情況下任何比較排序演算法都需要做 nlgn 次比較 計數排序 假設輸入的資料都屬於乙個小區間內的整數 counting sort a,b,k 1.let c 0.k be a new array 2.for i 0 to k 3.c i 0 4.for j 1 to a.length 5.c ...