java实现快速排序法
快速排序是一种冒泡排序,只是把将要排序的数据分成了两组,然后通过冒泡排序进行排序,然后左边的数通过递归再次排序,右边也一样通过递归两次排序,最后得到结果。
图解:
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实现快速排序法相关推荐
- Java 实现快速排序法对数组进行排序
快速排序是对冒泡排序的一种改进,其排序速度相对较快. 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按照这个方法对这两部分数据分别 ...
- 快速排序法 Java实现
快速排序法又叫二分法排序: import java.util.Random;public class Quicksort {public static void main(String[] args) ...
- java 数据结构与算法 ——快速排序法
快速排序法: 顾名思议,快速排序法是实践中的一种快速的排序算法,在c++或对java基本类型的排序中特别有用.它的平均运行时间是0(N log N).该算法之所以特别快,主要是由于非常精练和高度优化的 ...
- Java 快速排序法
原理简介 快速排序原理即是,选择数组中的一个元素作为基准值 pivot(通常使用第一个就行),然后遍历其他元素,将小于 pivot 的元素放置在左边,将大于 pivot 的元素放置在右边.如是你可以得 ...
- java里面快速排序_Java:快速排序
快速排序相当于冒泡排序的进化版本,优点是速度比冒泡排序更快,缺点是写起来逻辑比冒泡排序啰嗦一点,没那么直观. 快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的.每次排序的时候 设置一个基准 ...
- 【重温基础算法】内部排序之快速排序法
内部排序之快速排序法 文章目录 内部排序之快速排序法 主要思想 过程演示 JAVA代码 算法分析 时间复杂度分析 最好时间复杂度 最坏时间复杂度 平均时间复杂度 空间复杂度 对冒泡排序的一种优化 主要 ...
- 经典算法之快速排序法(附B站最细讲解视频)
活动地址:21天学习挑战赛 文章目录 一.算法 1.算法概述 2.算法步骤 3.算法特点 二.算法实践 1.Java代码 2.执行结果 3.讲解视频 三.复杂度分析 1.时间复杂度 2.空间复杂度 一 ...
- 1.16 快速排序法(Quicksort)
快速排序(Quicksort)是对冒泡排序的一种改进,是一种排序执行效率很高的排序算法. 快速排序的基本思想是:通过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数 ...
- 探索初级算法学习笔记-快速排序法
快速排序法学习笔记 #include<stdio.h>void swap(int *a,int *b) {int t;t=*a;*a=*b;*b=t; }void quickSort(in ...
最新文章
- OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量
- OpenCV中使用YOLO对象检测
- 阿里云推出全球首个影像类应用一站式解决方案:智能云相册
- 知名5G女教授邱锂力加盟MSRA,任职副院长!出走半生,回归上海
- UNITY_MATRIX_IT_MV[Matrix]
- Linux的一些简单的常用命令
- python实现TCP客户端从服务器下载文件
- mac 10.12.6 Fiddler的安装
- 3d打印英语文献_DMD 激光熔覆3D打印机型设计在仿真计算中的经验分享
- 如何使用工具进行线上 PHP 性能追踪及分析?
- java中的原型模式_java中的原型模式理解
- 大数据之路,阿里巴巴大数据实践
- 【C51单片机】密码锁设计
- yolov3详细讲解
- 音视频入门系列-视频封装格式篇(TS)
- wpf 三种 loading 样式
- BZOJ 1924 [Sdoi2010]所驼门王的宝藏 tarjan缩点+拓扑DP
- 轩小陌的Python笔记-day08 模块一总结
- 为什么从此电脑访问不了ftp_巧用FTP来管理手机文件 从此摆脱USB
- 华硕ROG STRIX Z690-A GAMING WIFI D4吹雪+12700K OC 0.7.7 EFI 黑苹果引导文件
热门文章
- Flax Engine(动画系统)学习笔记(二)——动画类型
- 史上最牛的Linux视频教程—兄弟连 学习笔记2
- 搭建 K8S 环境:Centos7安装生产环境可用的K8S集群图文教程指南
- Elasticsearch嵌套字段的聚合操作
- 微信小程序使用i-view组件库的i-input无法触发bind:change事件的搞笑“bug”
- 在 Vue3 中使用 AntV X6
- 新手必读:哪个牌子的投影仪性价比高?高性价比投影仪推荐
- 智能科学毕业设计论文选题
- 用Python Flask为女朋友做一个简单的网站(附可运行的源码)
- 面向亿万级用户的QQ一般做什么?——兴趣部落的 Web 同构直出分享