你知道有哪些排序演算法?還記得是怎麼實現的嗎?今天炒雞辣雞就和大家回憶一下有哪些排序演算法。
氣泡排序
原理:相鄰的2個數進行比較。每次經過一趟比較,最大數或者最小數就會被交換到最後一位。
時間複雜度:如果是按照從小到大的順序進行排序,只需要把前n-1個大的數歸為到後面的n-1位即可,所以外層迴圈只需要到len-1。氣泡排序的最壞情況就是把順序變為逆序,把逆序變為順序。時間複雜度o(n^2)
選擇排序
原理:在要排序的一組數中,選出最小的數與第乙個數交換,然後再在剩下的數中選出最小的數與第二個數交換….直到第n-1個數與第n個數比較為止
插入排序
原理:不斷向乙個已經排好序的數列中按順序插入資料,最終當最後乙個數插入完以後,得到的就是我們需要的有序數列了
希爾排序(插入排序的一種更高效的改進版本)
原理:初期選用大跨步(增量較大)間隔比較,使記錄跳躍式接近它的排序位置;然後增量縮小;最後增量為 1 ,這樣記錄移動次數大大減少,提高了排序效率
二分排序
原理:在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們中間的那個元素比,如果小,則對前半再進行折半,否則對後半進行折半,直到left快速排序(又稱分割槽交換排序,簡稱快排)
原理:
歸併排序
原理:1)劃分問題:把序列分成元素個數盡量相等的兩半
2)遞迴求解:把兩半元素分別排序
3)合併問題:把兩個有序表合併成乙個。(每次只需要把兩個序列的最小元素加以比較,刪除其中的較小元素並加入合併後的新錶)
基數排序
原理:以整形為例,將整形10進製按每位拆分,然後從低位到高位依次比較各個位。主要分為兩個過程:
(1)分配,先從個位開始,根據位值(0-9)分別放到0~9號桶中(比如64,個位為4,則放入4號桶中);
(2)收集,再將放置在0~9號桶中的資料按順序放到陣列中;
(3)重複(1)(2)過程,從個位到最高位(比如32位無符號整型最大數4294967296,最高位為第10位)。基數排序的方式可以採用lsd(least significant digital)或msd(most significant digital),lsd的排序方式由鍵值的最右邊開始,而msd則相反,由鍵值的最左邊開始。
計數排序
原理:計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i的元素的個數。然後根據陣列c來將a中的元素排到正確的位置。
sizeof,你知道多少
今天去參加面試,筆試的第一道題就是這個sizeof的用法,考了六七個,平時覺得很熟,真拿來考到迷糊了。有必要再總結一下。題是這樣的 在32位作業系統環境下,請問以下sizeof的值各是多少。一 int p 10 sizeof p 這個就簡單,int型變數p佔4個位元組,答案就是4.二 char p ...
Java Enum,你知道多少?
引用的列舉型別 public enum state 遍歷 for state s state.values 可以使用switch 列舉變數把列舉值作為case條件。enumsetstateset enumset.allof state.class for state s stateset enumm...
LayoutParams 你知道多少?
從概念講起 layoutparams,顧名思義,就是布局引數。而且大多數人對此都是司空見慣,我們 xml 檔案裡面的每乙個 view 都會接觸到 layout 這樣的屬性,這實際上就是對布局引數的描述。大概大家也就清楚了,layout 這樣開頭的東西都不屬於 view,而是控制具體顯示在 layou...