排序算法思想

来源:互联网 发布:分级阅读 知乎 编辑:程序博客网 时间:2024/05/17 05:06

常见排序算法思想汇总

  最近一直忙于参加各种公司的面试,而排序算法是常考的面试题目。所以自己对常见的排序算法的思想作了总结,在这里作一下记录,希望有需自取。当然,也许我总结得不是很好,衷心希望各位大佬指教。之后有时间自己也会记录一下各种排序算法的具体实现。

插入排序

  1. 直接插入排序:对数组的从第二个数开始的每一个数,向前遍历,将比当前数大的数向后移一位,直到找到第一个小于或等于当前数的数,将当前数插入到该数的后面。
  2. 二分插入排序:对数组的从第二个数开始的每一个数,在前面的数组成的有序数组中,用二分查找的方法找到从左边起第一个比当前数大的数的位置,将当前数放到该位置的前面。
  3. 希尔排序:选取初始步长d,将序列分成d个序列,分别进行直接插入排序,然后d以一定规则自减。重复上述步骤,直到d等于1为止

交换排序

  1. 冒泡排序:进行n-1次循环,每一次循环对数组进行遍历,依次比较前后的两个元素,如果前面元素大于后面元素,则交换两者的位置。
  2. 快速排序:通过一趟排序将要排序的数据分成独立的两部分,其中一部分数据比另外一部分数据要小,然后在按同样的方法将两部分进行排序。

选择排序

  1. 直接选择排序:每次选出序列中的最小值,与序列的第一个元素交换。重复n-1次,则序列成为有序序列。
  2. 堆排序:将元素都插入堆中。每插入一个元素,进行向上筛选,如果子节点的值比父节点的值小,则交换两者位置。
    堆建好以后,取出堆顶元素,然后将堆顶元素与最后一个元素交换,删除最后一个元素。进行向下筛选,如果子节点的值比父节点的值小,则交换两者位置。重复上述步骤,直到取出所有的元素。此时取出的元素就是有序序列。

归并排序

      将数组等分成两部分,分别进行归并排序,然后将有序的两个子序列合并,则可以得到有序序列。

原创粉丝点击