快速排序 与 归并排序(分治思想)

归并排序

分治思想的体现
时间复杂度: 最好,最坏,平均都是 O(n * log n)
空间复杂度: 需要额外 O(n) 的空间
稳定性: 由于不存在交换操作,所以是稳定的排序
原理: 长度为n的表,划分为n个部分,两两进行合并,最终得出一个有序表
在这里插入图片描述
不断地递归分割整个表(分治),直到每个元素都是单独的一个表,然后将元素两两合并

合并操作是怎么进行的?

  1. 同时遍历两个表,使用两个指针分别指向两个表中的元素,并实现索引
  2. 比较两个表中当前指针指向的元素,将较小(大)的元素先后加入新的数组,并让指针加一
  3. 最终使归并得到的表以一张新表加入下一轮的归并,直到排序结束

在这个过程中,把表中每个元素都遍历了一遍,并且图中树的高度为logn,所以归并排序的时间复杂度为O(n * log n)

快速排序:

分治思想的体现
时间复杂度: 最好,平均 为 O(n * log n) , 最坏情况为 O(n2)
空间复杂度: O(log n) ~O(n)
稳定性: 由于产生了数值的交换,所以是不稳定

原理:

  1. 选择一个基准元素(一般选择最左边的元素)
  2. 使用双指针,分别从左边和右边两个方向向中间移动
  3. 当前指针指向的数值小于或者大于基准元素的时候与基准值交换位置
  4. 将比基准元素小的交换到左边,比基准元素大的交换到右边,当左右指针重合时,然后以基准元素为界限分割整个表
  5. 分别对左右两边再进行一次上述操作,直到不可再分割。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值