您的位置:首页 > 其它

排序算法总结

2015-09-04 23:41 337 查看

前言

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

精髓

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

归类

   


插入排序

直接插入排序

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

    


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

希尔排序

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



交换排序

冒泡排序

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

    


快速排序

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

选择排序

简单选择排序

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

    


堆排序

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

归并排序

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

基数排序

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

复杂度和稳定性





版权声明:本篇文章转载自许晨阳的播客,原文链接:/article/1821931.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: