选择排序——快速排序
发布日期:2021-09-28 18:46:39 浏览次数:6 分类:技术文章

本文共 1494 字,大约阅读时间需要 4 分钟。

    快速排序是一个速度非常快的交换排序方式,他的实现思路就是选取一个元素作为分界值,将数组小于分界值的元素排列在左边,大于分界值的元素排列在右边。然后多次递归后得出完成排序的数组。

    

package com.h3c.paixu;public class 快速排序Demo {	public static void main(String[] args) {		// 1. 初始化一个无序数组		int[] myArr = { 23, 35, 73, 27, 4, 77, 54, 84, 47, 56, 34, 32, 75, 32,				31, 0, 99, 7, 54, 57 };		myArr = 快速排序(myArr);		for (int i : myArr) {			System.out.print(i + " ");		}	}	private static int[] 快速排序(int[] myArr) {		int i = 1;// 左边的index		int j = myArr.length - 1;// 右边的index		int 分界值index = 0;		int 分界值 = myArr[0];		while (true) {			// 1.找到左边第一个大于分界值的index			for (; i < myArr.length; i++) {				if (myArr[分界值index] < myArr[i]) {					break;				}			}			// 2.找到右边第一个小于分界值的index			for (; j > 0; j--) {				if (myArr[分界值index] > myArr[j]) {					break;				}			}			// 3.如果i > j则交换元素后继续,否则结束			if (i < j) {				int tempValue = myArr[i];				myArr[i] = myArr[j];				myArr[j] = tempValue;			} else {				break;			}		}		// 4.将所有小于分界值的数组与所有大于分界值的数组递归排序		int[] leftArr = new int[j];		for (int n = 0; n < leftArr.length; n++) {			leftArr[n] = myArr[n + 1];		}		if (leftArr.length > 1) {			leftArr = 快速排序(leftArr);		}		int[] rightArr = new int[myArr.length - i];		for (int k = 0, n = i; k < rightArr.length; k++, n++) {			rightArr[k] = myArr[n];		}		if (rightArr.length > 1) {			rightArr = 快速排序(rightArr);		}		// 5.组合排序后的数组		for (int n = 0; n < leftArr.length; n++) {			myArr[n] = leftArr[n];		}		myArr[j] = 分界值;		for (int n = 0, k = i; n < rightArr.length; n++, k++) {			myArr[k] = rightArr[n];		}		return myArr;	}}

转载地址:https://blog.csdn.net/h3c4lenovo/article/details/8579404 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:插入排序——直接插入排序
下一篇:交换排序——冒泡排序

发表评论

最新留言

很好
[***.229.124.182]2024年03月12日 14时39分57秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

android日期选择区间控件_Android时间区间的选择 2019-04-21
lin通讯从节点同步间隔场_LIN模块介绍 2019-04-21
instantiate 卡顿严重_Unity中Instantiate实例化物体卡顿问题的解决 2019-04-21
mysql注入提取邮件_Mysql提取数据每日自动邮件通知 2019-04-21
mysql 列权限_mysql 权限相关 2019-04-21
手机端 vue+vant datetime支持时分秒_vueCli4+vant+router+vuex+移动端适配 2019-04-21
kafka消费者直接存在mysql中_【Canal】利用canal实现mysql实时增量备份并对接kafka 2019-04-21
python中readlines()函数_python中读取文件函数read()、readline()、readlines()的区别 2019-04-21
python入门之基础语法第四关输入输出答案_Python基本语法入门,基础 2019-04-21
strtus2改成springboot_spring、springmvc、springboot、struts区别 2019-04-21
unity wsad 鼠标_Unity键盘WASD实现物体移动 2019-04-21
mysql日志解析table_map_MySQL二进制日志分析-TABLE_MAP_EVENT 2019-04-21
mysql创建密码服务断开_MySQL连接与断开服务器 | 学步园 2019-04-21
python多进程间通信_PYTHON——多进程:进程间通信和数据共享 2019-04-21
mysql在存储过程仍_mysql存储过程 2021-06-24
java getfield_Java Class getField()用法及代码示例 2021-06-24
java rmi 实例_JAVA RMI 实例 2021-06-24
java htmlunit hellod_JSoup doesn't load the whole HTML [duplicate] 2021-06-24
java的bin目录_JDK的bin目录下那些常见工具使用集锦 2021-06-24
java 圆桌_圆桌问题 - Acm_walker - 博客园 2021-06-24