Java实现快速排序,详细注释

本文深入探讨了快速排序算法的执行流程,包括选择轴点元素、分割序列以及递归排序子序列。通过随机选择轴点来降低最坏情况的概率,以实现平均时间复杂度为O(n log n)的高效排序。代码示例展示了如何在Java中实现快速排序,包括轴点元素的选取和元素的重新排列过程。

执行流程

① 从序列中选择一个轴点元素(pivot)
✓ 假设每次选择 0 位置的元素为轴点元素
② 利用 pivot 将序列分割成 2 个子序列
✓ 将小于 pivot 的元素放在pivot前面(左侧)
✓ 将大于 pivot 的元素放在pivot后面(右侧)
✓ 等于pivot的元素放哪边都可以
✓即最后轴点元素在序列中心处
③ 对子序列进行 ① ② 操作
✓ 直到不能再分割(子序列中只剩下1个元素)

快速排序——轴点构造流程
在这里插入图片描述
快速排序——与轴点相等的元素
在这里插入图片描述
cmp位置的判断分别改为<= 、>=会起到什么效果
在这里插入图片描述
快速排序算法的本质:将每个元素都转换成轴点元素。

◼ 如果轴点左右元素数量极度不均匀,最坏情况
 T n = T n − 1 + O n = O(n 2 )

◼ 为了降低最坏情况的出现概率,一般采取的做法是
随机选择轴点元素

代码实现

package com.mj.sort.cmp;

import com.mj.sort.Sort;

public class QuickSort<T extends Comparable<T>> extends Sort<T> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值