幾種排序算法思路簡記

1.選擇排序

  • 每次選出最小值與第i位交換。

2.插入排序

  • 每次當做前面有序往裏面插入,插入的方式爲從後往前冒泡。

3.冒泡排序(及改進)

  • 勝者爲王,相鄰兩兩pk,每次都把最值送到最後。
  • 改進:設置flag,若發現本次沒有元素交換過,則跳出,排序完畢。

4.希爾排序

  • 設置一個gap,通常爲數組長度一半。
  • 每次比較xi和xgap,以及選擇是否交換。
  • 逐漸縮小gap = 0.5gap, 對間隔有序數組進行插入。

5.歸併排序

  • 分而治之。
  • 分:每次把數組分左右兩分,分到底,每邊有一個或0個元素。
  • 治:每次把兩個有序的數組合並,即一個個從左右挑一個放進去,直到全部合併爲有序。

6.快速排序

  • 選軸值,一般爲第一個。
  • j從右邊找比軸值小的,交換,此時軸值在右邊。
  • i從左邊找比軸值大的,交換,此時軸值在中間。
  • 一直到i >=j,此時軸值左側都是比他小的,右側都是比他大的。
  • 然後對左右繼續遞歸。

7.堆排序

  • 把數組看成完全二叉樹。滿足對於索引爲i的節點,左子節點索引爲2i+1,右子節點索引爲2i+2。
  • 從下而上建立小(大)根堆,滿足整棵樹都是根節點小(大)於左右子節點。
  • ###從下而上是因爲要把最值送到根節點,如果從上往下下面要是有最大值就無法回到根節點。打怪升級稱王得一點點來。
  • 每次把第一個元素(根節點)和最後(相對的,每次往前一個)一個元素交換,代表找到了當前最值,放在最後。
  • 這個時候重新調整堆師起滿足小(大)根堆,調整方式自上而下。
  • ###從上而下是因爲要給新的根節點找對位置,如果自下而上,假設建立小根堆,根節點可能是最大值,但是換一次就滿足條件,無法把他送到下面。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章