快速排序——java
发布日期:2021-06-07 05:56:24
浏览次数:4
分类:技术文章
本文共 1752 字,大约阅读时间需要 5 分钟。
快速排序
时间复杂度:O(n*log(2)n) 空间复杂度:O(n*log(2)n) 不稳定 核心代码import java.util.Arrays;/** * 快排 * @author jin * */public class QuickSort { public static void main(String[] args) { int[] a={ 3,57,346,7,146,43,3,14,7,41,1,3465}; quickSort(a, 0, a.length-1); } public static void swap(int[] a,int i,int j){ a[j]=a[i]^a[j]; a[i]=a[i]^a[j]; a[j]=a[i]^a[j]; } public static int sort(int[] a,int left,int right){ int key=a[left]; boolean flag=true; while(right!=left){ if(flag){ if(key<=a[right]){ right--; }else{ swap(a,left,right); flag=false; } }else{ if(key>=a[left]){ left++; }else{ swap(a,left,right); flag=true; } } } a[left]=key; return left; } public static void quickSort(int[] a,int left,int right){ if(left
快速排序是指,先选定一个key值,然后遍历这个数组,如果有比key值大的放右边,有比key值小的放左边,这样key值就跑到数组的中间了,key值就把原数组分成了左右两个子数组,然后用递归的方法再对key值左右两边的数组进行快速排序,直到全部排序完成。
步骤: (1)一般选择第一个数为key值,有左右两个索引,左索引left此时等于0,指的是key值,右索引right此时等于a.length-1,指的是数组最后一个数。int key=a[left];
(2)比较key值和a[right]的值,如果key<a[right]
,则right--
;如果key>a[right]
,则交换key和a[right]的位置;然后再反过来和左边的数进行比较。
boolean flag=true;while(left!=right){ //如果left=right的话,就说明key跑到中间了 if(flag){ if(key a[left]){ left++;//如果key比左边的数大的话,左边的索引往后移一位 }else{ swap(a.left,right);//如果key比左边的数小的话,交换这两个数 flag=true;//交换完成后,key跑到左边了,此时开始和右边的数进行比较 } }}
(3)当key跑到数组的中间时,然后用递归的方法排序左右两个子数组。
void sort(int[] a,int left,int right){ if(left
转载地址:https://blog.csdn.net/Levi_moon/article/details/51474192 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月07日 00时11分26秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HTTP keep-alive详解
2019-04-26
字符编码(python编码机制的过去和现在)
2019-04-26
python序列的高阶函数:map,reduce,filter,sorted
2019-04-26
python模块的定义,和模块的作用域
2019-04-26
面向对象,即class类,类的封装,属性的类别划分,
2019-04-26
面向对象的继承和多态,剖析对象的信息(获取相关信息),类属性和实例属性
2019-04-26
JS的语句标识,注释,区分大小写
2019-04-26
JS的变量,使用strict模式
2019-04-26
对象,对象属性和方法
2019-04-26
条件判断:if else switch
2019-04-26
循环,4种方式
2019-04-26
对象的拓展:ES6的新数据类型Map和Set,解决键值JS中对象键只能为字符串的不合理性
2019-04-26
Iterable类型的遍历
2019-04-26
对象的方法(函数),初识this关键字
2019-04-26
箭头函数和匿名函数的异同
2019-04-26
字符串高效的、能复用的、简练的操作:RegExp(正则表达式)
2019-04-26
JSON:一种速度快的,标准的,序列化的数据交换格式(字符串)
2019-04-26