【劍指offer】員工年齡排序

蘭亭風雨發表於2014-05-07

轉載請註明出處:http://blog.csdn.net/ns_code/article/details/25144793


    對公司所有員工的年齡進行排序,公司總共有幾萬名員工,要求時間複雜度為O(n)。


    很明顯的計數排序題目,員工的年齡肯定在一個範圍之內,我們這裡假設在0-99之內,算很大了,這樣就可以開闢一個長度為100的陣列,儲存各個年齡的員工的個數。

    程式碼如下:

/*
員工年齡排序,主要用計數排序的思想,
時間複雜度為O(n),需要固定大小的額外輔助空間
*/
#include<stdio.h>
#include<string.h>

/*
計數排序,員工年齡肯定在0-99之間
*/
void SortAge(int ages[],int len)
{
	if(ages == NULL || len<1)
		return ;
	int timesOfAge[100];
	memset(timesOfAge,0,sizeof(timesOfAge));
	int i;
	//計算每個年齡員工的個數
	for(i=0;i<len;i++)
	{
		if(ages[i]<=99 && ages[i]>=0)
			timesOfAge[ages[i]]++;
	}
	//對ages進行排序
	int index = 0;
	for(i=0;i<100;i++)
	{
		int j = 0;
		while(j<timesOfAge[i])
		{
			ages[index++] = i;
			j++;
		}
	}
} 

int main()
{
	int ages[] = {33,34,45,24,36,23,21,22,19,26,45,34,21,34,34,33,52,22,32,25,27,43,22,21,20,33,26,27,15,29};
	int len = 30;
	SortAge(ages,len);
	int i;
	for(i=0;i<len;i++)
		printf("%d ",ages[i]);
	printf("\n");
	return 0;
}

    測試結果:



    演算法準備放一放了,馬上就要開題了,居然一點緊張感都沒有,論文方向是搞視訊異常檢測的,還是有點小難度的,導師雖然是所謂的國家有突出貢獻科學家,但是依然不管不問,畢竟這麼大把年紀了,也可以理解,萬事還是要靠自己!

    漸漸從實習生招聘的陰影中走出來了,其實也就面了兩家公司而已。開題後要轉移重點了,做了些Android專案,但是掌握比較深入的卻在jvm和java併發機制,Android平臺相關的技術掌握的比較皮毛,接下來要加深對網路協議,java網路程式設計和Android平臺的學習,再做個比較好點的專案,完善下之前的專案,總感覺自己的專案拿不出手,而且又不太會吹,哎!!再接再厲吧!校招前要做好充分的準備,放手一搏。。。


相關文章