下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第图解Java经典算法快速排序的原理与实现目录快速排序算法原理图解Java代码实现算法分析
快速排序
通过一趟排序将待排元素分成独立的两部分,其中一部分为比基准数小的元素,另一部分则是比基准数大的元素。然后对这两部分元素再按照前面的算法进行排序,直到每一部分的元素都只剩下一个。
本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。
算法原理
从数列中挑出一个元素作为基准点重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面然后基准值左右两边,重复上述步骤通过递归把基准值元素左右两侧的数组排序,排完之后,整个数组就排序完成了
图解
问题描述:
给定一个无序排列的数组nums,使其能够按照有序输出
示例:
输入:nums=[4,3,1,2,9,6],
输出:nums=[1,2,3,4,6,9]
图解如下:
Java代码实现
核心代码
publicclassQuickSort{
//比较v是否小于w
publicstaticbooleanless(Comparablev,Comparablew){
returnpareTo(w)
//数组元素交换位置
privatestaticvoidswap(Comparable[]a,inti,intj){
Comparabletemp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
//排序
publicstaticvoidsort(Comparable[]a){
intl=0;
inth=a.length-1;
sort(a,l,h);
privatestaticvoidsort(Comparable[]a,intl,inth){
if(h=l)return;
//对数组进行分组(左右两个数组)
//i表示分组之后基准值的索引
inti=partition(a,l,h);
//让左边的数组有序
sort(a,l,i-1);
//让有边的数组有序
sort(a,i+1,h);
publicstaticintpartition(Comparable[]a,intl,inth){
//确定基准值
Comparablekey=a[l];
//定义两个指针
intleft=l;
intright=h+1;
//切分
while(true){
//从右向左扫描,移动right指针找一个比基准值小的元素,找到就停止
while(less(key,a[--right])){
if(right==l)
break;
//从左向右扫描,移动left指针找一个比基准值大的元素,找到就停止
while(less(a[++left],key)){
if(left==h)
break;
if(left=right){
break;
}else{
swap(a,left,right);
//交换基准值
swap(a,l,right);
returnright;
}
publicclassQuickSortTest{
publicstaticvoidmain(String[]args){
Integer[]arr={3,1,2,4,9,6};
QuickSort.sort(arr);
System.out.println(Arrays.toString(arr));
//排序前:{3,1,2,4,9,6}
//排序后:{1,2,3,4,6,9}
运行结果:
算法分析
时间复杂度
快速排序的最佳情况就是每一次取到的元素都刚好平分整个数组,由于快速排序用到了递归调用,因此计算其时间复杂度也需要用到递归算法来计算。T[n]=2T[n/2]+f(n);此时时间复杂度是O(nlogn)。最坏的情况,则和冒泡排序一样,每次比较都需要交换元素,此时时间复杂度是O(n^2)。
因此,快速排序的时间复杂度为:O(nlogn)。
空间复杂度
空间复杂度主要是递归造成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年国家开发银行(青岛市分行)人员招聘笔试备考题库及答案详解
- 2026重庆百业兴物业管理有限责任公司招聘2人笔试参考题库及答案详解
- 2026年淮北市相山区中小学新任教师公开招聘10名笔试备考试题及答案详解
- 2026年衢州龙游县公开招聘卫生专业技术人员26人笔试模拟试题及答案详解
- 2026浙江台州市玉环市城更建设开发有限公司招聘编外人员3人笔试参考题库及答案详解
- 线上线下土特产销售合作协议范本
- 2026云南黄金矿业集团股份有限公司第一次招聘工作人员13人笔试备考题库及答案详解
- 2026河北石家庄市委党校(石家庄行政学院、石家庄市社会主义学院、河北正定干部学院)公开选聘专职教师14名笔试参考题库及答案详解
- 畜牧养殖场动物疫病防控合作协议
- 2026陕西旅游烹饪职业学院招聘6人笔试备考试题及答案详解
- 2025年下半年安徽省港航集团有限公司所属企业社会公开招聘22名考试参考试题及答案解析
- 安眠药服用安全知识培训课件
- 电机学教案本
- (正式版)DB42∕T 1787.4-2021 《科技馆展览教育通 用要求 第4部分:说明牌》
- 【MOOC答案】《智能仪器设计技术》(东南大学)章节期末慕课答案
- Zippo-2024原版年册完整集合系列
- 盒子记号打印器设计
- 租赁模板脚手架维修保养技术规范
- 《电力管理信息系统工程初步设计文件内容深度规定》编制说明
- TSG G7001-2015 锅炉监督检验规则
- 贵州光伏项目可行性研究报告
评论
0/150
提交评论