排序算法总结

前言

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

精髓

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

归类

   这里写图片描述

插入排序

直接插入排序

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

    这里写图片描述

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

希尔排序

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

这里写图片描述

交换排序

冒泡排序

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

    这里写图片描述

快速排序

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

选择排序

简单选择排序

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

    这里写图片描述

堆排序

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

归并排序

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

基数排序

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

复杂度和稳定性

这里写图片描述

 

版权声明:本篇文章转载自许晨阳的播客,原文链接:http://blog.csdn.net/u010924834/article/details/45848559 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值