快速排序——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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:归并排序——java
下一篇:冒泡排序——java

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.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
函数的定义的四个注意部分,定义的两种方式及其分号结尾的情况,函数参数的2个关键字(arguments,rest),return正确写法 2019-04-26
JS的语句标识,注释,区分大小写 2019-04-26
JS的7种基本数据类型和3种对象类型,以及它们(主要Number和String)的一些方法和属性的说明;常见的布尔值转换表。 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
Array的高阶函数:map、reduce、filter、sort,every,find,findIndex,forEach 2019-04-26
箭头函数和匿名函数的异同 2019-04-26
字符串高效的、能复用的、简练的操作:RegExp(正则表达式) 2019-04-26
JSON:一种速度快的,标准的,序列化的数据交换格式(字符串) 2019-04-26