快速排序图解_排序算法

a3d634aaad4070a22a57c60b5ae40032.png

1. 快速排序

  • 分治思想
  • 不稳定
  • 时间复杂度:最差O(n^2),平均O(nlogn)
  • 空间复杂度:O(n+1)
  • 每次排序设置一个基准点,小于等于基准点的数放到基准点左边,大于等于基准点的数放到基准点右边。

2. 堆排序

  • 完全二叉树
  • 不稳定
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(1)
  • 过程:1、初始化堆,从最后一个非叶节点开始调整,将R[0, ..., n-1]构造为堆(交换过程要检查是否保持大/小顶堆性质)2、将当前无序区的堆顶元素R[0]同该区间的最后一个记录交换,然后将新的无序区间调整为新的堆。

3. 冒泡排序

  • 稳定
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。

4. 插入排序

  • 稳定
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 插入排序非常类似于整理扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。

5. 选择排序

  • 不稳定
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。

6. 归并排序

  • 稳定
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(n)
  • 示意图(图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园)

ca5ddca385c1dd172701f1f86afe9e71.png

dc7d1340e679848834a7b3ba1f6a2e31.png

bbeae5aecefbbf859db5d1ab4a8f6df2.png

7. 希尔排序

  • 不稳定
  • 时间复杂度O(nlogn)~O(n^2)
  • 空间复杂度O(1)
  • 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序。该方法的基本思想是:把记录按步长 gap 分组(初始gap=n/2),对每组记录采用直接插入排序方法进行排序。随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到1时,整个数据合成为一组,构成一组有序记录,则完成排序。
  • https://blog.csdn.net/qq_39207948/article/details/80006224

8. 桶排序

  • 稳定
  • 时间复杂度:O(n+nlogn-nlogm),m为桶数
  • 空间复杂度:O(n+m)
  • 如果相对于同样的N,桶数量M越大,其效率越高,最好的时间复杂度达到O(N)。当然桶排序的空间复杂度为O(N+M),如果输入数据非常庞大,而桶的数量也非常多,则空间代价无疑是昂贵的。
  • 示意图(【图解数据结构】 一组动画彻底理解桶排序)

fc4ca27e4368964618dd4f104f600f66.gif

9. 其他

内排序:在排序过程中,所有元素调到内存中进行的排序,称为内排序。内排序是排序的基础。内排序效率用比较次数来衡量。按所用策略不同,内排序又可分为插入排序、选择排序、交换排序、归并排序及基数排序等几大类。

外排序:在数据量大的情况下,只能分块排序,但块与块间不能保证有序。外排序用读/写外存的次数来衡量其效率。

dc4afeb2df2f18a208baff98a6309598.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值