對於冒泡這個排序演算法,相信大家都不陌生,所以我們更加深入的來看一下這個演算法,討論一下他的時間複雜度,最好情況是當所有元素都按公升序排列好了,這個時候的時間複雜度是o(n),多少個元素就比較了多少次。為了不讓排序無腦的進行下去,我們加了乙個flag標記,排好序便會自動退出。最壞的情況下,都是逆序排的那麼我們就得比較n*(n-1)/2次才能排好,此時的時間複雜度最壞是o(n2).
選擇排序和氣泡排序不同,選擇排序會通過一輪比較,選出最小的那個元素的下標,然後和第乙個元素進行交換,這樣第乙個元素的位置就可以確定了。
第二輪如法炮製,從第二個元素開始依次比較,選出最小的元素的下標,和第二個元素交換位置,這樣第二小的元素位置就確定了。
後面依次類推,直到整個陣列呈現有序狀態。
假設乙個陣列已經基本有序,則這個時候插入排序就是乙個不錯的選擇。插入排序是先保證左邊元素是基本有序的,然後將後面的元素依次和左邊元素進行比較,如果比較到乙個比自己小的元素時就可以停止比較了,因為左邊已經呈現有序狀態,找到比自己小的元素時,就不用再往後比較了。
希爾排序時要先選取乙個間隔,對序列中以此為間隔的數進行排序,這些間隔會構成乙個增量序列。注意,當你對下乙個間隔排完序後,上一次間隔排序的結果是不會受到影響的(還是有序的)。當然,這個間隔序列最小的一定是一。
希爾排序解決了簡單排序當中每次只能對相鄰的兩個元素進行比較,一輪比較只能消除乙個逆序對,但是希爾排序的缺點還是有的,當間隔序列元素不互質且間隔內剛好是有序的,這時希爾排序很是雞肋。
由此衍生出了許多間隔序列的選擇方法
堆排序就像是對選擇排序的優化
堆中有一種能快速找到最小值的結構叫最小堆(小根堆),其堆頂是整個堆中最小的,而且在堆頂出堆之後恢復成最小堆的這麼乙個過程也是理想的。
可見我往期部落格
演算法與資料結構之美 排序 上
氣泡排序 bubble sort 插入排序 insertion sort 選擇排序 selection sort 解答開篇 本篇部落格將會總結一下冒泡 插入 選擇排序,思考乙個問題就是,插入排序和氣泡排序的時間複雜度都是o n 2 但是為何在實際軟體開發中更傾向於選擇插入排序?分析排序演算法的執行效...
資料結構與演算法之美 排序(上)
開篇問題的解答請放到最後再看噢 雖然氣泡排序和插入排序演算法的時間複雜度都是o n2 氣泡排序涉及到元素的交換,插入排序涉及到元素的移動,交換次數和移動次數都是相同的,都是原始序列的逆序度。在氣泡排序中,元素的交換要三次賦值語句,而插入排序中元素的移動只需要一次賦值語句。所以若考慮到效能優化到極致,...
資料結構與演算法之排序
三 演算法效能 二 七種排序演算法 資料結構之線性表 資料結構之鍊錶 資料結構之串 資料結構之圖 資料結構之排序演算法 對n個資料執行某種操作,使其按照某種規則有序的排列,這樣的操作就是排序。內排序與外排序 按照排序過程中資料是否全放在記憶體中,可以分為內排序和外排序 交插選並 其中內排序又分為插入...