1. 程式人生 > >【算法基礎筆記】常用的排序算法的時間、空間復雜度,部分排序算法原理

【算法基礎筆記】常用的排序算法的時間、空間復雜度,部分排序算法原理

排序算法 數字 堆排 dex 最大的 兩個 大頂堆 全部 src

技術分享圖片

冒泡排序

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重復以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較

堆排序

  1. 將初始待排序關鍵字序列(R1,R2....Rn)構建成大頂堆,此堆為初始的無須區;
  2. 將堆頂元素R[1]與最後一個元素R[n]交換,此時得到新的無序區(R1,R2,......Rn-1)和新的有序區(Rn),且滿足R[1,2...n-1]<=R[n];
  3. 由於交換後新的堆頂R[1]可能違反堆的性質,因此需要對當前無序區(R1,R2,......Rn-1)調整為新堆,然後再次將R[1]與無序區最後一個元素交換,得到新的無序區(R1,R2....Rn-2)和新的有序區(Rn-1,Rn)。不斷重復此過程直到有序區的元素個數為n-1,則整個排序過程完成。

計數排序

  1. 遍歷一遍整個數組,找出數組中最大數和最小數之間的差距 range,然後開辟一個大小為range的數組count並全部初始化為0;
  2. 再次遍歷整個數組,把每個元素的值映射到count的下標index,每映射到一個index,就把count[index]加一;
  3. 根據統計結果count,把數寫會原數組,某個值index要寫count[index]遍到原數組,這樣,原數組就有序了

【算法基礎筆記】常用的排序算法的時間、空間復雜度,部分排序算法原理