筆試時總是會有各種排序的題層出不窮。
雖然是FE,但是面試時面試官也會經常讓你手撕個劍指offer或者是順便問問常見排序算法的時間復雜度 or 穩定性。
最近有點小心累很久沒有寫過總結。
但事實證明寫總結是讓心靜下來的一種方式~
關于各種算法的原理還有偽代碼就不贅述了~有看到大神總結的表格直接copy過來用了。
看似簡簡單單的表格,蘊含的信息量卻相當的大~
一個刷題功利性患者就從刷題的角度來對表格總結寫吧~
題型1、對時間復雜度的考察
① 給定場景,選擇最優的排序算法
考察的是各算法的最好/最壞使用場景。
插入排序
最好情況,正序有序,只需要比較n次,且不需要移動。時間復雜度為O(n)。
最壞情況,逆序有序,n個元素,每個元素都需要比較n-1次,時間復雜度為O(n^2)。
冒泡排序
最好情況,正序有序,時間復雜度為O(n);
最壞情況,逆序有序,時間復雜度為O(n^2)。
快速排序
最好情況:均勻分布,每次都將序列分為兩個部分(一般二分復雜度都與logn有關),時間復雜度為O(nlogn);
最壞情況:序列基本有序,時間復雜度為O(n^2)。
希爾排序,和步長有關
選擇排序
最好情況:正序有序,交換0次,但是每次都要找到最小元素,因而只是減少了交換次數,時間復雜度為O(n^2)
②給定場景,直接考察時間復雜度
③與初始狀態相關,比較次數,時間復雜度
比較次數和時間復雜度還是有區別的,堆排序的時間復雜度不會因為待排序序列的有序程度而改變,但是待排序序列的有序程度會影響比較次數,選擇排序每選一個輸出來數出來都要和剩余的所有數比較,這樣待排序序列的有序程度不會影響比較次數。
元素的移動次數與關鍵字的初始排列次序無關的是:基數排序
元素的比較次數與初始序列無關的是:選擇排序
元素的時間復雜度與初始序列無關的是:選擇排序、歸并排序、堆排序
題型2、考察對排序算法的理解
①給定一個數組,寫出在某種排序算法遍歷1次/n次的排列。
②給定原序列和經過N次排序后的序列,判斷最有可能是用什么算法進行排序。
這一點其實更多考察的是各排序算法進行一次排序后元素的位置。
其中,冒泡、選擇、快排、堆都是可以確定一個元素的位置的。
快排確定的是標桿元素的位置,而插入排序確定的是元素的相對位置。
題型3、對空間復雜度的考察
歸并排序空間復雜度為O(n),快排為O(logn),其余都是O(1)。
題型4、對穩定性的考察
穩定排序:冒泡排序、插入排序、歸并排序、(計數排序、桶排序、基數排序);
不穩定排序:選擇排序。、希爾排序、快速排序、堆排序。
其余題型等待后面刷題再更新~~