快速排序 java导包_排序算法-快速排序(Java实现)

上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,“快速”,一看就是个好算法~

快速排序(QuickSort)是啥?

我们先看下百度百科的介绍快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

简单点~

我们可以把快速排序看着三个步骤:

1.选择基准值:在待排序列中,按照某种方式挑出一个元素,作为基准值。

2.分割操作:以该基准值在序列中的实际位置,把序列分成两个子序列,一边是比它大的值,另外一边是比它小的值。

3.递归:对两个子序列进行快排,直到序列为空或者只有一个元素。

过程演示

这是我画的一张图,结合这张图再看下面的代码可能会比较好理解一点,当然在看代码的时候最后可以自己画一张草图,可以熟悉一下整个过程,加深理解!

代码实现

public class QuickSort {

public static void main(String[] args) {

int[] arr = new int[] {9,4,6,8,3,10,4,6};

quickSort(arr,0,arr.length - 1);

System.out.println(Arrays.toString(arr));

}

public static void quickSort(int[] arr,int low,int high) {

int p,i,j,temp;

if(low >= high) {

return;

}

//p就是基准数,这里就是每个数组的第一个 p = arr[low];

i = low;

j = high;

while(i < j) {

//右边当发现小于p的值时停止循环 while(arr[j] >= p && i < j) {

j--;

}

//这里一定是右边开始,上下这两个循环不能调换(下面有解析,可以先想想)

//左边当发现大于p的值时停止循环 while(arr[i] <= p && i < j) {

i++;

}

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

}

arr[low] = arr[i];//这里的arr[i]一定是停小于p的,经过i、j交换后i处的值一定是小于p的(j先走) arr[i] = p;

quickSort(arr,low,j-1); //对左边快排 quickSort(arr,j+1,high); //对右边快排

}

}

一些问题

1.什么是基准值:

其实就是在数组里面找一个数,一般选择数组的第一个数作为基准值,当然这不一定是最佳的基准值,但这不妨碍我们做快速排序。本篇只讲标配版的快排,所以就选第一位作为基准值,以后有机会再更新高配版的~

2.快排中为什么一定是右边先开始循环?

从右边先开始的前提是我们选择序列中最左边的元素最为基准值。

先从右边开始可以保证i,j相等的时候,arr[i] = arr[j] 小于基准值p。这样交换之后才能保证基准值左右两边分别小于和大于它的值。

我们图片演示一下:

可以发现如果左边先走的话将导致分组不成功,即左边的元素并不是都小于基准值。

本篇完,如果有错误的地方欢迎大家指正,一起学习一起进步

我的公众号:Java小部落

我的个人博客:http://www.fangjiaxian.cn

不定时发发笔记,找一起学习的伙伴,欢迎大家来搞~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java怎么判断一个char是汉字_JAVA中判断char是否是中文的几种方法

展开全部对照最新版本的 Unicode (最少是62616964757a686964616fe59b9ee7ad9431333335343330 6.0 版本&#xff0c;不知道现在是否有 7.0) 里面找从哪个 code point 数字开始到哪个数字结束的是常用中文汉字&#xff0c;另外冷僻汉字肯定不是用单个 char 能表示的&#xff0c;…

java接口经常变动前端怎么办_Java进程故障排查(CPU资源占用高,接口响应超时,功能接口停滞等)...

故障分析# 导致系统不可用情况(频率较大)&#xff1a;1)代码中某个位置读取数据量较大&#xff0c;导致系统内存耗尽&#xff0c;进而出现Full GC次数过多&#xff0c;系统缓慢&#xff1b;2)代码中有比较消耗CPU的操作&#xff0c;导致CPU过高&#xff0c;系统运行缓慢&#x…

使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法

第二章java基础语法1、java关键字abstractbooleanbreakbytecasecatchcharclassconstcontinuedefaultdodoubleelseextendsassertfinalfinallyfloatforgotoifimplementsimportinstanceofintinterfacelongnativenewstrictfppackageprivateprotectedpublicreturnshortstaticsupersw…

mysql 二维数组下标_php二维数组指定下标排序

/** Effect 排序* author YangYunHao* email 1126420614qq.com* time 2018-11-26 11:59:38* parameter arr:排序数组,key:按什么排,type:升序降序* */function arraySort($arr,$key,$typeasc){$keyArr []; // 初始化存放数组将要排序的字段值foreach ($arr as $k>$v){$keyA…

用java实现楼层导航_JS实现网站楼层导航效果代码实例

壹 ❀ 引言对于楼层导航而言&#xff0c;还有个重要的功能就是&#xff0c;随着滚动条滚动&#xff0c;达到某层时得同步点亮楼层导航的小图片。由于我前面也说了不打算使用JQ&#xff0c;所以想着用JS去实现它&#xff0c;实现并不难&#xff0c;主要得弄清滚动满足怎样的条件…

费尔马小定理素数java_利用费马小定理判断素数

今天听了ljss神犇的数论课&#xff0c;顿时感觉————我真的是太弱啦&#xff01;我只能稍微写一下我能听懂的部分orz那么这就是今天我为数不多能听懂一点的之一......QAQ首先先介绍今天的主角&#xff1a;费马小定理————转自维基百科没看懂的话我稍微解释一下&#xff0…

java读取一段缓存音频文件夹_java实现酷狗音乐临时缓存文件转换为MP3文件的方法...

本文实例讲述了java实现酷狗音乐临时缓存文件转换为MP3文件的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;酷狗临时缓存文件&#xff0c;其实已经是吧MP3文件下载好了&#xff0c;只是名字看上去好像是通过md5算法重命名的。酷狗在缓存文件的时候会同时缓存歌词…

java aspectj_AspectJ基本用法

AOP虽然是方法论&#xff0c;但就好像OOP中的Java一样&#xff0c;一些先行者也开发了一套语言来支持AOP。目前用得比较火的就是AspectJ了&#xff0c;它是一种几乎和Java完全一样的语言&#xff0c;而且完全兼容Java(AspectJ应该就是一种扩展Java&#xff0c;但它不是像Groovy…

php连接数据库返回数据类型,php从数据库读取数据,并以json格式返回数据的方法...

php中&#xff0c;从数据库读取数据&#xff0c;并以json格式返回数据。具体方法如下&#xff1a;第一步&#xff0c;定义相关变量$servername "localhost";$username "root";$password "root";$mysqlname "datatest";$json ;$da…

php json to object,PHP JSON_FORCE_OBJECT函数实现强转对象

JSON_FORCE_OBJECT在多级数组中&#xff0c;JSON_FORCE_OBJECT会将所有嵌套数值数组编码为对象。如果你只关注第一级数组(例如&#xff0c;使其适合作为MySQL JSON列)&#xff0c;那么可以将第一级数组强制转换为对象&#xff0c;例如&#xff1a;$ json json_encode((object)…

php推送示例wordpress,给WordPress的编辑后台添加提示框的代码实例分享

WordPress 3.5 新添加了一个提示框功能&#xff0c;可以创建一个提示框&#xff0c;然后指向任何元素&#xff0c;比如下边的例子&#xff1a;本文就来教你怎么创建一个这样的提示框。首先需要添加提示框的脚本&#xff0c;这样才能使用提示框的 JS 方法。//挂载提示框脚本func…

php 去除标签内样式,PHP去除html标签,php标记及css样式代码参考

语法: string strip_tags(string str);传回值: 字串函式种类: 资料处理解析&#xff1a;本函式可去掉字串中包含的任何 HTML 及 PHP 的标记字串。若是字串的 HTML 及 PHP 标签原来就有错&#xff0c;例如少了大于的符号&#xff0c;则也会传回错误。而本函式和 fgetss() 有着相…

jmeter php网站,jmeter实战之phpwind随机回帖/发帖

关键词&#xff1a;jmeter phpwind 性能测试一、性能需求1)性能需求&#xff1a;30min内&#xff0c;phpwind随机回帖/发帖&#xff0c;观察服务器性能的表现。2)需求分析&#xff1a;2.1 核心业务论坛系统的核心业务主要是登录、看帖、发帖、回帖&#xff0c;业务建模时应考虑…

restful api php,RestfulAPI · ThinkPHP6.0接口开发与应用及uniapp快速入门(更新完毕) · 看云...

# Restful API>[success]Restful API是目前Web API 设计中比较流行的一种设计风格。## Restful API>[info]RESTful是一种软件架构风格、设计风格&#xff0c;而**不是**标准&#xff0c;只是提供了一组设计原则和约束条件。>[danger]对于这种风格&#xff0c;ThinkPHP…

php 向服务器发放请求,PHP客户端向服务器端发送请求并向远程服务器发送服务器端请求...

我的方案如下&#xff1a;>单击按钮时,客户端将向服务器端发送请求>一旦服务器端收到请求,它将向远程服务器发送另一个请求以获得结果>一旦响应到来,服务器端应该回应客户端的响应.客户$.post(login_server.php{act:"post",phone:phone,passwords:passwords…

php检查在线用户,php – 检查用户是否在线laravel

我有列last_activity,其中写入日期最后一个活动用户使用中间件.我如何检查在线用户以及何时注销&#xff1f;中间件&#xff1a;class LastActivityUser{/*** Handle an incoming request.** param \Illuminate\Http\Request $request* param \Closure $next* return mixed*/pu…

java 写文件缓存,java泛型实现文件缓存

package joyport.hbase;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.HashMap;/*** 文件缓存读写** author xiepengjoyport.com*/public class…

java方法重载的意义,java方法重载

class ChongZai{public void a(int a);public void a(Strting a);public void a(int a,int b);}如上就是一个重载了 而重载要满足一下条件:1.必须是同一个类2.方法名(也可以叫函数)一样3.参数类型不一样或参数数量不一样重载的作用&#xff1a;还是以上面的例子ChongZai cz new…

php7改进,关注一下:PHP 7.3.7 正式发布 改进、修复的地方不少哦

PHP 7.3.7正式发布了。PHP(PHP&#xff1a;Hypertext Preprocessor)是一种在电脑上执行的脚本语言&#xff0c;主要是用途在于处理动态网页&#xff0c;也包含了命令列执行接口(command line interface)&#xff0c;或者产生图形使用者接口(GUI)程式。版本主要还是修复 bug&…

matlab光学教程,基于MATLAB的物理光学仿真

摘要&#xff1a;利用MATLAB编程语言对典型物理光学实验进行了仿真模拟&#xff0c;制作了包括干涉、衍射、信息光学、晶体光学实验在内的光学实验仿真平台&#xff0c;可应用到光学理论和实验教学中&#xff0c;使整个抽象的物理过程变得直观形象&#xff0c;增强了学生的学习…