快速排序原理

快速排序利用分治的思想,每次选取一个主元,把数组分为部分。

需要考虑的是:

1.如何选取主元,主元的选取关系着算法的效率,最好情况下每次主元大小居中,复杂度为nlogn;最坏情况下,主元每次都在端点。

2.如何划分为两部分。

主元的选取:取左中右三个取中位数;

子集划分:

调用上面的方法后,主元被放到Right-1处;现在处理这[Left,Right-1]这部分,取出Left作为i,Right-2作为j;A[i]<主元,i++;否则停止。A[j]>主元,j--;否则停止。i<j,否则两个交换A[i]A[j].最后交换A[i]与主元;此时主元被放到最终的位置上了;

如果有元素等于主元,交换吗?

考虑一种极端的情况,所有的数都相等;如果交换,每次对半,复杂度nlogn,如果不换,每次都在端点,复杂度n²;所有还是交换比较好;快排使用递归实现,涉及很多进栈出栈,在分段的数组规模小(如100个)时,调用插入排序,效果更好;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值