java排序之快排

2023-11-01

这篇文章来谈谈快排,最近有一种感觉,只要有规律可循的代码,分解成为两部分以后效率就会提高很多。代码思想如下
 这个代码写的是快排,快排最主要的思维就是寻找一个分界值,大的放在一边,小的放在一边,然后递归分别处理大的和小的,
          这里需要注意的是我们在移动游标是需要的是加上等于分界的值,否则的话如果有相等的值就会进入死循环,
          很简单的来说,当以一个数为分界值的时候,那么另一个和他相同的数如果没有到边界是不会移动的

          ,但是无论是大的还是小的递归完成以后就一定会挨着分界值。

代码:

package www.jk.qsort;

import java.util.Arrays;

/**
 * 
 * @author jk 这个代码写的是快排,快排最主要的思维就是寻找一个分界值,大的放在一边,小的放在一边,然后递归分别处理大的和小的,
 *         这里需要注意的是我们在移动游标是需要的是加上等于分界的值,否则的话如果有相等的值就会进入死循环,
 *         很简单的来说,当以一个数为分界值的时候,那么另一个和他相同的数如果没有到边界是不会移动的
 *         ,但是无论是大的还是小的递归完成以后就一定会挨着分界值。
 * 
 */
public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = new int[] { 2, 1, 6, 7, 8, 5, 3, 5 };
		quickSort(a, 0, a.length - 1);
		System.out.println(Arrays.toString(a));
	}

	private static void quickSort(int[] a, int begin, int end) {
		//
		int tbegin = begin, tend = end;
		// 将第一个值作为快排序的分界值
		int pivot = a[begin];
		while (tbegin < tend) {
			// 如果两个游标没有交集,或者后面一直大于或等于分界值就一直向前移动
			while (tbegin < tend && a[tend] >= pivot) {
				--tend;
			}
			a[tbegin] = a[tend];
			// 如果两个游标没有交集,或者前面是小于或等于分界值,就一直向后头移动
			while (tbegin < tend && a[tbegin] <= pivot) {
				++tbegin;
			}
			a[tend] = a[tbegin];

		}
		// 将临界值赋值给游标的交集的地方
		a[tbegin] = pivot;
		if (begin < tend) {
			// 递归排序游标的左边
			quickSort(a, begin, tend - 1);
		}
		if (tbegin < end) {
			// 递归排序游标的右边
			quickSort(a, tbegin + 1, end);
		}

	}

}


  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java排序之快排 的相关文章

随机推荐

  • 论文阅读 视频生成

    T C Wang et al Video to Video Synthesis arXiv 1808 06601 cs Dec 2018 Accessed Nov 03 2020 Online Available http arxiv or
  • CTP监管评测API初始密码修改

    CTP监管评测API初始密码修改 最近在申请看穿式监管认证 我用的是开源的量化交易软件vnpy balabala找期货公司申请了认证账号 然而第一次登录必须修改密码 然而vnpy没有这个功能 网上找了几篇教程 压根不能用 但好在代码可以借鉴
  • 【vue】keep-alive清除缓存最简单暴力的方法

    项目场景 场景一 使用vue开发移动端 有ABC三个页面 点击A跳转到B 点B跳转到C 点C返回B 点B返回A 场景二 场景一实现之后 会出现这样一个问题 先从A跳转到B B页面会被缓存下来 当再从D跳转到B时 B页面并不会更新 解决方案
  • 我的硬盘出现I/O错误,

    用pctools去修复吧 在天空软件园里能下到 用Windows 9x启动盘启动 插入含有Pctools9 0的光盘 运行PCT90目录下的de exe 先进入 Options 菜单 选 Configuration 配置 命令 按下 空格
  • 【j2ee系列】springmvc中使用quartz,项目启动就执行某些任务

    quartz有几种执行任务的方式 至于几种我也不知道 至少有两种吧 一种是org springframework scheduling quartz CronTriggerBean方式 配置指定的时间执行一次任务 如
  • 项目经理如何分配任务

    http www 51testing com html 62 n 245962 html 记得自己第一次当PM 那是接手的项目 原来的PM 在项目需求分析做完之后 去接手另一个重要的项目去了 当时我和另外两个小组长 自然就成了接手PM的人选
  • DC-3靶机渗透实战

    0x00 信息收集 使用arp scan查看局域网内所有主机IP 定位到目标主机IP 使用nmap扫描端口服务 发现只有80端口开放 服务应该是Joomla 使用dirsearch进行路径爆破 发现administrator后台路径 访问h
  • myBatis大于1000的in查询解决办法

    之前公司一位同事写的方法
  • 笔记本安装centos之后,合上盖还正常运行设置

    修改如下配置 让其生效即可 具体操作 vim etc systemd logind conf 将上图所示 HandleLidSwitch suspend 修改为lock 并将起前面 号去掉 重启配置让其生效systemctl restart
  • IMX6学习记录(12)-通过系统接口点亮LED

    上面是我的微信和QQ群 欢迎新朋友的加入 1 硬件 硬件上 led连接的IO是GPIO5 PIN8 高电平熄灭 低电平点亮 2 export引脚 GPIO5 PIN8的在gpio上的位置是5 32 8 136 cd sys class gp
  • 大搜索时代!SEO如何挖掘关键词?方法都在这里!-搜嗖工具箱

    做SEO关键词挖掘是关键 好的关键词可以帮助您的网站在搜索引擎中获得更好的排名 要问都有哪些挖掘关键词的方法 那就太多了 下边就列举几个我常用的方式吧 方法一实用工具挖掘关键词 我们知道有很多关键词在线挖掘工具可以帮助我们快速实现关键词挖掘
  • 这款开源神器,让你能在 iPad 上随心所欲写代码!

    注意 这篇文章就是在劝你买iPad Pro 手动狗头 最近 苹果推出了新的iPad Pro 号称生产力工具 然而对程序员来说 不能写代码 就难以称得上生产力 虽然也有一些优秀的写代码App可供程序员使用 但本着能不花钱就不花钱的原则 还是可
  • epoll实现原理

    epoll的使用 epoll只有以下的三个系统函数调用 epoll create epoll ctl和epoll wait int epoll create int size 其中参数 1 size指明了生成描述符的最大范围 该函数返回一个
  • Java_.jar .war .ear区别

    jar 全称 java archive 包含 class properties文件 是文件封装的最小单元 部署文件 application client xml 级别 小 war 全称 web archive 包含 Servlet JSP页
  • es搜索引擎

    ES的优势及使用场景 ES的功能及使用简介 简介 Elaticsearch简称为ES 是一个开源的可扩展的分布式的全文检索引擎 它可以近乎实时的存储 检索数 据 本身扩展性很好 可扩展到上百台服务器 处理PB级别的数据 ES使用Java开发
  • switch删除用户显示无法连接服务器,switch无法连接互联网怎么办 NS无法联机联网详细解决办法...

    switch最经常碰到的问题是就是联网的问题 很多玩家会遇到无法联网以及联机对战的情况 那么遇到这样的问题该怎么办呢 下面就来为大家分享一下解决办法 可能的原因 网络NAT类型不是创建与其他用户的对等连接 Peer to Peer P2P
  • 软件测试相关试题知识点

    软件测试相关试题 1 下面不属于软件测试步骤的是 A 集成测试 B 回归测试 C 确认测试 D 单元测试 解析 B 回归测试是指修改旧代码后重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误 因此不是软件测试的步骤 2 Junit
  • MAC下jupyter的安装及使用

    一 安装 在终端输入以下命令 conda install jupyter notebook 运行结果如下 Collecting package metadata done Solving environment done Package P
  • date时间加减(linux,aix)

    需求是这样的 有一个在日志中的时间 格式化为 Y m d H M S格式的 那现在想比较这个时间与当前时间差值是否大于一天 这个应该怎么做呢 设计到日期的减法运算 首先先man date来看一下用法吧 DATE 1 User Command
  • java排序之快排

    这篇文章来谈谈快排 最近有一种感觉 只要有规律可循的代码 分解成为两部分以后效率就会提高很多 代码思想如下 这个代码写的是快排 快排最主要的思维就是寻找一个分界值 大的放在一边 小的放在一边 然后递归分别处理大的和小的 这里需要注意的是我们