请你介绍一下快排算法;以及什么是稳定性排序,快排是稳定性的吗;快排算法最差情况推导公式

参考回答:

1、快排算法

根据哨兵元素,用两个指针指向待排序数组的首尾,首指针从前往后移动找到比
哨兵元素大的,尾指针从后往前移动找到比哨兵元素小的,交换两个元素,直到
两个指针相遇,这是一趟排序,经常这趟排序后,比哨兵元素大的在右边,小的
在左边。经过多趟排序后,整个数组有序。

稳定性:不稳定

平均时间复杂度:O(nlogn)

2、稳定排序

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,
这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在
排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳
定的。

快排算法是不稳定的排序算法。例如:

待排序数组:int a[] ={1, 2, 2, 3, 4, 5, 6};

若选择a[2](即数组中的第二个2)为枢轴,而把大于等于比较子的数均放置在
大数数组中,则a[1](即数组中的第一个2)会到pivot的右边, 那么数组中的两
个2非原序。

若选择a[1]为比较子,而把小于等于比较子的数均放置在小数数组中,则数组中
的两个2顺序也非原序。

3、快排最差情况推倒

在快速排序的早期版本中呢,最左面或者是最右面的那个元素被选为枢轴,那最坏的情况就会在下面的情况下发生啦:

1)数组已经是正序排过序的。 (每次最右边的那个元素被选为枢轴)

2)数组已经是倒序排过序的。 (每次最左边的那个元素被选为枢轴)

3)所有的元素都相同(1、2的特殊情况)

因为这些案例在用例中十分常见,所以这个问题可以通过要么选择一个随机的枢轴,或者选择一个分区中间的下标作为枢轴,或者(特别是对于相比更长的分区)选择分区的第一个、中间、最后一个元素的中值作为枢轴。有了这些修改,那快排的最差的情况就不那么容易出现了,但是如果输入的数组最大(或者最小元素)被选为枢轴,那最坏的情况就又来了。

快速排序,在最坏情况退化为冒泡排序,需要比较O(n2)次(n(n - 1)/2次)。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值