快速排序是一种冒泡排序,只是把将要排序的数据分成了两组,然后通过冒泡排序进行排序,然后左边的数通过递归再次排序,右边也一样通过递归两次排序,最后得到结果。

图解:

package com.demo.sort;import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;public class QuickSort {public static void main(String[] args) {//        int[] arr={-9,78,0,23,-567,70};int[] arr=new int[8];for (int i = 0; i < arr.length; i++) {arr[i]=(int)(Math.random()*10);}Date date=new Date(  );SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YY-MM-DD-HH:MM:SS");String format = simpleDateFormat.format( date );System.out.println( "测试前的时间是" + format );quickSort( arr,0,arr.length-1 );//注意是arr.length-1不是arr.lengthDate date1=new Date(  );String format1 = simpleDateFormat.format( date1 );System.out.println( "排序后的时间是"+format1 );System.out.println( Arrays.toString( arr ) );}public static void quickSort(int[] arr,int left,int right){int l=left;int r=right;/*中轴值*/int pivot=arr[(left+right)/2];
//        循环把比pivot小的值放到pivot左边,大的放到右边while(l<r){//            从左边开始找,直到找到比pivot的大的值才退出while(arr[l]<pivot){l++;}
//            从右边开始找,直到找到比小的值才退出while(arr[r]>pivot){r--;}int temp=0;//用来把两个数交换位置temp=arr[l];arr[l]=arr[r];arr[r]=temp;
//说明已经比较完毕,可以退出if(l>=r){break;}
//    如果交换完后发现这个arr[l]==pivot,则l往右偏移if(arr[l]==pivot){r--;}if (arr[r]==pivot){l++;}}//        左右的两边的数已经分组,可以继续左边,右边的数排序
//            l==r也满足条件,所以必须让它们执行下面的条件
//    !!!小心    没有加上这个会出现/*      Exception in thread "main" java.lang.StackOverflowErrorat com.demo.sort.QuickSort.quickSort(QuickSort.java:54)*/if(l==r){l++;r--;}//            此时只是分成了左右两边的数,但是左右的数并没有排序好
//            递归排序左边的数和右边的数//这个r已经找出了的的if(left<r){quickSort( arr,left,r );}if(right>l){quickSort( arr,l,right);}}}

java实现快速排序法相关推荐

  1. Java 实现快速排序法对数组进行排序

     快速排序是对冒泡排序的一种改进,其排序速度相对较快. 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按照这个方法对这两部分数据分别 ...

  2. 快速排序法 Java实现

    快速排序法又叫二分法排序: import java.util.Random;public class Quicksort {public static void main(String[] args) ...

  3. java 数据结构与算法 ——快速排序法

    快速排序法: 顾名思议,快速排序法是实践中的一种快速的排序算法,在c++或对java基本类型的排序中特别有用.它的平均运行时间是0(N log N).该算法之所以特别快,主要是由于非常精练和高度优化的 ...

  4. Java 快速排序法

    原理简介 快速排序原理即是,选择数组中的一个元素作为基准值 pivot(通常使用第一个就行),然后遍历其他元素,将小于 pivot 的元素放置在左边,将大于 pivot 的元素放置在右边.如是你可以得 ...

  5. java里面快速排序_Java:快速排序

    快速排序相当于冒泡排序的进化版本,优点是速度比冒泡排序更快,缺点是写起来逻辑比冒泡排序啰嗦一点,没那么直观. 快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的.每次排序的时候 设置一个基准 ...

  6. 【重温基础算法】内部排序之快速排序法

    内部排序之快速排序法 文章目录 内部排序之快速排序法 主要思想 过程演示 JAVA代码 算法分析 时间复杂度分析 最好时间复杂度 最坏时间复杂度 平均时间复杂度 空间复杂度 对冒泡排序的一种优化 主要 ...

  7. 经典算法之快速排序法(附B站最细讲解视频)

    活动地址:21天学习挑战赛 文章目录 一.算法 1.算法概述 2.算法步骤 3.算法特点 二.算法实践 1.Java代码 2.执行结果 3.讲解视频 三.复杂度分析 1.时间复杂度 2.空间复杂度 一 ...

  8. 1.16 快速排序法(Quicksort)

    快速排序(Quicksort)是对冒泡排序的一种改进,是一种排序执行效率很高的排序算法. 快速排序的基本思想是:通过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数 ...

  9. 探索初级算法学习笔记-快速排序法

    快速排序法学习笔记 #include<stdio.h>void swap(int *a,int *b) {int t;t=*a;*a=*b;*b=t; }void quickSort(in ...

最新文章

  1. OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量
  2. OpenCV中使用YOLO对象检测
  3. 阿里云推出全球首个影像类应用一站式解决方案:智能云相册
  4. 知名5G女教授邱锂力加盟MSRA,任职副院长!出走半生,回归上海
  5. UNITY_MATRIX_IT_MV[Matrix]
  6. Linux的一些简单的常用命令
  7. python实现TCP客户端从服务器下载文件
  8. mac 10.12.6 Fiddler的安装
  9. 3d打印英语文献_DMD 激光熔覆3D打印机型设计在仿真计算中的经验分享
  10. 如何使用工具进行线上 PHP 性能追踪及分析?
  11. java中的原型模式_java中的原型模式理解
  12. 大数据之路,阿里巴巴大数据实践
  13. 【C51单片机】密码锁设计
  14. yolov3详细讲解
  15. 音视频入门系列-视频封装格式篇(TS)
  16. wpf 三种 loading 样式
  17. BZOJ 1924 [Sdoi2010]所驼门王的宝藏 tarjan缩点+拓扑DP
  18. 轩小陌的Python笔记-day08 模块一总结
  19. 为什么从此电脑访问不了ftp_巧用FTP来管理手机文件 从此摆脱USB
  20. 华硕ROG STRIX Z690-A GAMING WIFI D4吹雪+12700K OC 0.7.7 EFI 黑苹果引导文件

热门文章

  1. Flax Engine(动画系统)学习笔记(二)——动画类型
  2. 史上最牛的Linux视频教程—兄弟连 学习笔记2
  3. 搭建 K8S 环境:Centos7安装生产环境可用的K8S集群图文教程指南
  4. Elasticsearch嵌套字段的聚合操作
  5. 微信小程序使用i-view组件库的i-input无法触发bind:change事件的搞笑“bug”
  6. 在 Vue3 中使用 AntV X6
  7. 新手必读:哪个牌子的投影仪性价比高?高性价比投影仪推荐
  8. 智能科学毕业设计论文选题
  9. 用Python Flask为女朋友做一个简单的网站(附可运行的源码)
  10. 面向亿万级用户的QQ一般做什么?——兴趣部落的 Web 同构直出分享