几种排序算法思路简记

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。
  • 从下而上建立小(大)根堆,满足整棵树都是根节点小(大)于左右子节点。
  • ###从下而上是因为要把最值送到根节点,如果从上往下下面要是有最大值就无法回到根节点。打怪升级称王得一点点来。
  • 每次把第一个元素(根节点)和最后(相对的,每次往前一个)一个元素交换,代表找到了当前最值,放在最后。
  • 这个时候重新调整堆师起满足小(大)根堆,调整方式自上而下。
  • ###从上而下是因为要给新的根节点找对位置,如果自下而上,假设建立小根堆,根节点可能是最大值,但是换一次就满足条件,无法把他送到下面。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章