排序算法总结

前言

  一提排序算法,大家脑海中就会想起插入,冒泡,选择……很多种排序算法。东西一多,大家就容易头疼。所以,在总结各个算法之前,我们先来减负。

精髓

  • 基本操作是两个数之间进行比较。
  • 每一类排序算法都有基本算法和优化算法(也可以称作无前提的算法和有前提的算法)。
  • 优化算法是建立在一定基础前提之上(待排序序列已经有一定的顺序了)。
  • 优化算法会降低时间复杂度,但是以增加空间复杂度为代价。(实际当中我们需要在时间复杂度和空间复杂度之间寻找平衡)

归类

   排序算法总结_第1张图片

插入排序

直接插入排序

思想:将一个待排序的序列插入到一个最开始只有一个元素的有序序列中。随着插入操作进行,有序序列的长度逐渐增长。

    排序算法总结_第2张图片

>注意:插入的时候要确定插入的位置,如何确定呢?与有序表中已有的元素进行比较,比较的时候是从后向前(从右向左)比。

希尔排序

思想:每次按一个增量进行分组,将一组内的数据进行直接插入排序。直到增量=1.把增量理解为下标的间距。如下图,当增量为5时,把下标为0的数和下标为5的数放到一组,因为5-0=5,正好等于增量值。增量为几,就会分成几组。(按增量分组+直接插入排序)

排序算法总结_第3张图片

交换排序

冒泡排序

思想:两个数进行比较,逆序则交换。

    排序算法总结_第4张图片

快速排序

思想:每一趟取第一个数据为标准,将数据分为小于它的和大于它的。按这种规则在对分成的每部分进行排序。

选择排序

简单选择排序

思想:每一趟找到最小的放到前面的一个位置。如第一趟找到最小的放在第一个位置,第二趟从剩下的当中找到最小的放在第二个位置……

    排序算法总结_第5张图片

堆排序

思想:不论是建堆还是调整堆都用到了反复“筛选”的过程。每次都会以一个结点作为标志,从该结点的孩子结点中寻找是否有小于该标志的。发生交换后,再从变动的结点的孩子结点中寻找是否有比该标志小的。

归并排序

思想:将两个有序序列合并成一个有序序列。而对于每一个有序子序列,则需要再分成两个有序序列进行合并,直到分解成每个单独有序的关键字,再按它们分解之前的方式合并。

基数排序

思想:如果关键字是十进制的,则基数为10,那么先看每个数的个位,将关键字分配到0,1,2,3,4,5,6,7,8,9中,再看十位,按相同方式分配,知道遍历完所有数位。

复杂度和稳定性

排序算法总结_第6张图片

你可能感兴趣的:(排序算法)