java递归实现排序_快速排序算法原理及java递归实现

快速排序 对冒泡排序的一种改进,若初始记录序列按关键字有序或基本有序,蜕化为冒泡排序。使用的是递归原理,在所有同数量级O(n longn) 的排序方法中,其平均性能最好。就平均时间而言,是目前被认为最好的一种内部排序方法

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

三个指针: 第一个指针称为pivotkey指针(枢轴),第二个指针和第三个指针分别为left指针和right指针,分别指向最左边的值和最右边的值。left指针和right指针从两边同时向中间逼近,在逼近的过程中不停的与枢轴比较,将比枢轴小的元素移到低端,将比枢轴大的元素移到高端,枢轴选定后永远不变,最终在中间,前小后大。

需要两个函数:

① 递归函数  public static void quickSort(int[]n ,int left,int right)

② 分割函数(一趟快速排序函数) public static int partition(int[]n ,int left,int right)

JAVA源代码(成功运行):

package testSortAlgorithm;

public class QuickSort {

public static void main(String[] args) {

int [] array = {49,38,65,97,76,13,27};

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

for (int i = 0; i < array.length; i++) {

System.out.println(array[i]);

}

}

/*先按照数组为数据原型写出算法,再写出扩展性算法。数组{49,38,65,97,76,13,27}

* */

public static void quickSort(int[]n ,int left,int right){

int pivot;

if (left < right) {

//pivot作为枢轴,较之小的元素在左,较之大的元素在右

pivot = partition(n, left, right);

//对左右数组递归调用快速排序,直到顺序完全正确

quickSort(n, left, pivot - 1);

quickSort(n, pivot + 1, right);

}

}

public static int partition(int[]n ,int left,int right){

int pivotkey = n[left];

//枢轴选定后永远不变,最终在中间,前小后大

while (left < right) {

while (left < right && n[right] >= pivotkey) --right;

//将比枢轴小的元素移到低端,此时right位相当于空,等待低位比pivotkey大的数补上

n[left] = n[right];

while (left < right && n[left] <= pivotkey) ++left;

//将比枢轴大的元素移到高端,此时left位相当于空,等待高位比pivotkey小的数补上

n[right] = n[left];

}

//当left == right,完成一趟快速排序,此时left位相当于空,等待pivotkey补上

n[left] = pivotkey;

return left;

}

}

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

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

相关文章

java 泛型 .net_Java泛型

标签&#xff1a;上一篇博文java8函数式编程--收集器collector&#xff1a;(http://my.oschina.net/joshuashaw/blog/487322)讲得比较随性&#xff0c;并没有把源码一句一句拿出来分析&#xff0c;后来发现groupingBy方法最后有一个if-else分支用来返回不同类型的collector&…

卡法电子商务 java_javacard DES算法API使用示例

********** 2017年3月15日留言 ——关于java卡Applet系列csdn博文 *************貌似有不少人在看我写的几篇关于java卡applet的博文&#xff0c;也收到了一些评论指正博文错误&#xff0c;或者私信叫我发代码文件过去。在此需要说明的是&#xff0c;java卡applet的这几篇博文…

java http请求原理_浅谈Spring Cloud zuul http请求转发原理

spring cloud 网关&#xff0c;依赖于netflix 下的zuul 组件zuul 的流程是&#xff0c;自定义 了ZuulServletFilter和zuulServlet两种方式&#xff0c;让开发者可以去实现&#xff0c;并调用先来看下ZuulServletFilter的实现片段Overridepublic void doFilter(ServletRequest s…

java堆外内存溢出_JVM 案例 - 堆外内存导致的溢出错误

案例一个网站为了实现客户端实时从服务端接收数据&#xff0c;使用了 CometD 1.1.1 作为服务端推送框架&#xff0c;服务器是 Jetty7.1.4&#xff0c;CPU i5&#xff0c;内存 4G&#xff0c;操作系统 32位Windows。服务端常常抛出内存溢出异常&#xff0c;管理员把堆开到最大(3…

java mail outlook_已启用Outlook API邮件与邮箱用户

一个非常微妙的问题&#xff0c;也许是特定的环境 . 我正在尝试使用Outlook 2010 API从启用邮件的用户中识别邮箱用户 . 我们在Notes to Exchange迁移期间使用Dell Quest迁移工具&#xff0c;它是一个流动的项目 . 仍处于原型阶段&#xff0c;因此使用VB宏来最终将在C&#xff…

oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

java程序调用Oracle 存储过程 获取返回值(无返回&#xff0c;非结果集&#xff0c;结果集)oracle中procedure是不能有返回值的&#xff0c;要想返回值&#xff0c;就得有输出参数&#xff0c;同样要想返回记录集&#xff0c;可以把游标类型作为输出参数。下面是详细情况说明&am…

mysql dump工具升级_MySQL数据库升级

当前不少系统的数据库依旧是MySQL5.6&#xff0c;由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升&#xff0c;因此需要升级数据库。本文通过逻辑方式、物理方式原地升级来介绍MySQL5.6 升级至MySQL5.7的方法&#xff0c;并介绍其使用场景。1. 逻辑方式升级逻辑方式升级…

java int 128 ==_为什么 Java Integer 中“128==128”为false,而”100==100“为true?

这是一个挺有意思的讨论话题&#xff0c;让我们用代码说话吧!运行下面的代码:Integer a 128, b 128;System.out.println(a b);Integer c 100, d 100;System.out.println(c d);你会得到:falsetrue基本知识&#xff1a;我们知道&#xff0c;如果两个引用指向同一个对象&…

mysql课程表学时_Mysql 巩固提升 (学生表_课程表_成绩表_教师表)

方便Mysql 巩固提升创建表并插入数据&#xff1a;-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS student;CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,sname varchar(32) DEFAULT NULL,s…

初始java_第一章__初始JAVA

1.java的三个发展方向&#xff1a;JAVASE(面向对象、API、JVM)、JAVAME(移动设备、游戏、通信)、JAVAEE(JSP、EJB、服务)2.开发JAVA的程序步骤&#xff1a;1.编写源程序 2.编译 3.运行3.JDKJRE开发工具下载java环境jdk 安装并配置环境变量&#xff0c;.安装直接下一步下一步直到…

python最常用的版本、也称为classic_2021年中国大学《创新思维与创业》单元测试答案...

2021年中国大学《创新思维与创业》单元测试答案被人们称为 “寒地水稻第一人”的是袁隆平答&#xff1a;错地图数据的基本特征包括答&#xff1a;时间属性 空间定位属性 地理属性对卖方征税导致商品价格上升答&#xff1a;√( )是在床榻上使用的一种矮形家具。答&#xff1a;炕…

java 泛型 继承_java基础之泛型的继承

关于泛型的基本介绍和理解请参考以下几篇文章&#xff0c;或查询更多资料&#xff1a;本篇以简单的List<>方式来进行说明。ArrayList继承了List,ArrayList没有继承ListList>等价于List extends Object>请参考以下代码&#xff1a;/*** author Ding Chengyun* 2014-…

appium java环境_Appium环境搭建(Windows版)

注&#xff1a;appium安装到C盘&#xff0c;node.js安装到C盘一、安装node.js1、到官网下载node.js&#xff1a;https://nodejs.org/en/download/2、获取到安装文件后&#xff0c;直接双击安装文件&#xff0c;根据程序的提示&#xff0c;完成nodejs的安装。3、安装完成后&…

ci mysql pdo_CI框架中pdo的使用方法

1、配置文件修改application/config文件夹下的database.php文件 $db[default] array(dsn > mysql:dbnameci_ecshop;host127.0.0.1,username > root,password > ,dbdriver > pdo,2、查询操作$sql select * from aaa where id :id;$sql_array array(:id > …

ie11加载java插件_IE浏览器中ActiveX插件的使用

在某些行业的B/S应用系统中会不可避免的要用到ActiveX浏览器插件&#xff0c;而ActiveX插件只能在IE内核浏览器中运行&#xff0c;而常用的IE浏览器的版本众多&#xff0c;从IE6到IE11&#xff0c;总共有6个版本&#xff0c;这就给开发的应用系统造成了不小的困扰&#xff1a;如…

netty java开发文档_Netty简明教学文档

写个简单点&#xff0c;比较小白的文档&#xff0c;言语比较接地气Netty是什么&#xff1f;NIO的高层封装&#xff0c;NIO很难写&#xff0c;所以有了Netty&#xff0c;方便异步的操作service的主要代码片段public void run() throws Exception {EventLoopGroup bossGroup new…

mysql 全局不重复_php uniqid() 通过MYSQL实现全局不重复的唯一ID

看了国外文章&#xff1a;https://jason.pureconcepts.net/2013/09/php-convert-uniqid-to-timestamp/ 不想写&#xff50;&#xff48;&#xff50;脚本uniqid()处理&#xff0c;想到用mysql一次性把数据库的ID改过来的方法&#xff0c;所以开始了以下研究方法一: 效率最高&…

java接口允许ajax访问_服务允许AJAX请求,允许跨域请求

当工作时间&#xff0c;因为需要JS 进行AJAX请求&#xff0c;这时候存在跨域问题&#xff0c;当出现这种情况时&#xff0c;有多种方案解决比如使用JSONP&#xff0c;也有一种简单的方式&#xff0c;就是在过滤器里面增加返回请求允许跨域head配置。代码如下&#xff1a;/**** …

mysql的增_MySQL之增_insert-replace

MySQL增删改查之增insert、replace一、INSERT语句带有values子句的insert语句&#xff0c;用于数据的增加语法&#xff1a;INSERT [INTO] tbl_name[(col_name,...)]{VALUES | VALUE} (expr ,...),(...),...①用来把一个新行插入到表中②为和其它数据库保持一致&#xff0c;不要…

python manager详解_python 多进程共享全局变量之Manager()详解

Manager支持的类型有list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和Array。但当使用Manager处理list、dict等可变数据类型时&#xff0c;需要注意一个陷阱&#xff0c;即Manager对象无法监测到它引用的可变对象值的修改&#xff0c…