《C++開發工程師崗位必備知識點七》

①數組名作爲函數參數的理解

以數組名作函數參數時,實參數組與形參數組都不必定義長度,因爲實參與形參的結合方式是地址結合,與數組長度無關。這句話針對一維數組是可以說正確的。

作爲實參:

一維數組的定義不需要定義長度,系統有時候可以自己判斷長度,比如:int a[] = {1,2};

作爲形參:

在函數的形參定義時,有沒有長度無所謂,參數傳遞是以指針形式實現的;比如void fun(int a[]){}

二維數組則不同:

作爲實參:

二維數組定義的時候,一定要給定第二維(列)的長度!

作爲形參:

假如定義了int a[2][3],這裏的a不是二級指針int **p,而是表示數組指針,

也就是說a是指向大小爲3的一維數組的指針,(a+1)則是下一個大小爲3的一維數組的指針……

形參中,可以表示數組指針的形式只有void fun( p[2][3] ){}形式!

②希爾排序理解

(1)希爾排序(shell sort)這個排序方法又稱爲縮小增量排序,是1959年D·L·Shell提出來的。該方法的基本思想是:設待排序元素序列有n個元素,首先取一個整數increment(小於n)作爲間隔將全部元素分爲increment個子序列,所有距離爲increment的元素放在同一個子序列中,在每一個子序列中分別實行直接插入排序。然後縮小間隔increment,重複上述子序列劃分和排序工作。直到最後取increment=1,將所有元素放在同一個子序列中排序爲止。 
(2)由於開始時,increment的取值較大,每個子序列中的元素較少,排序速度較快,到排序後期increment取值逐漸變小,子序列中元素個數逐漸增多,但由於前面工作的基礎,大多數元素已經基本有序,所以排序速度仍然很快。 
(3)關於希爾排序increment(增量)的取法。 
增量increment的取法有各種方案。最初shell提出取increment=n/2向下取整,increment=increment/2向下取整,直到increment=1。但由於直到最後一步,在奇數位置的元素纔會與偶數位置的元素進行比較,這樣使用這個序列的效率會很低。後來Knuth提出取increment=n/3向下取整+1.還有人提出都取奇數爲好,也有人提出increment互質爲好。應用不同的序列會使希爾排序算法的性能有很大的差異。 

③靜態鏈表的理解

靜態鏈表採用數組實現鏈表的存儲,用空間換取時間,刪除與插入需要改的是遊標。

定義一個較大的結構數組作爲備用結點空間 ( 即存儲池 ) 。當申請結點時,每個結點應含有兩個域: data 域和 cursor 域。 data 域用來存放結點的數據信息,此時的 cursor 域不在是指針而是遊標指示器,遊標指示器指示其後繼結點在結構數組中的相對位置 ( 即 數組下標) 。

④排序算法其他知識點

1、總排序趟數與初始狀態無關的有:(除了快速排序和優化的冒泡,其他都無關)

2、算法複雜度與初始狀態無關的有:堆排序歸併排序選擇排序基數排序

3、元素總比較次數與初始狀態無關的有:選擇排序基數排序

4、元素總移動次數與初始狀態無關的有:歸併排序基數排序

⑤二分查找注意事項

二分查找又稱折半查找,它是一種效率較高的查找方法。

二分查找要求:線性表是有序表,即表中結點按關鍵字有序,並且要用向量作爲表的存儲結構

注意事項:二分比較之後,範圍的選取需要特別注意,如果當前值與二分計算值K不同,則後續二分不應該把這個K繼續算進去,應該往前或者往後推一個再計算。

⑥散列函數除留取餘法取值的經驗問題

所取之值應該小於等於表長的最大質數。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章