查了下原来也属于快排的一种实现,了解了
package com.fourfireliu.test; public class MySort { //计算循环次数 private static int count1 = 0; //计算互换次数 private static int count2 = 0; public static void main(String args[]) { int[] testArray = {3,3,0,3,3}; MySort qs = new MySort(); qs.sort(testArray); } public void sort(int[] array) { if (array!=null&&array.length>1) { sort(array, 0, array.length-1); } //打印结果 System.out.println(); for (int i:array) { System.out.print(i+" "); } System.out.println(); System.out.println("Count1 is " + count1 + " and count2 is " + count2); } //排序基本方法入口 private void sort(int[] array, int fromIndex, int endIndex) { if (isOutOfBound(array, fromIndex)||isOutOfBound(array, endIndex)||fromIndex>=endIndex) { return; } int mid = getMid(fromIndex, endIndex); int from = getFirstLarger(array, fromIndex, mid); int to = getFirstSmaller(array, endIndex, mid); //从开头结尾各找一个位置不对的,两者进行互换,直到其中一个先到达中点 while (from!=-1&&to!=-1) { swap(array, from, to); from = getFirstLarger(array, from, mid); to = getFirstSmaller(array, to, mid); } //轮询剩下的,将目标数安置在合适位置 int target = mid; if (from!=-1) { for (int count=from;count<mid;count++) { count1++; target = getSwapTarget(array, count, target); } } if (to!=-1) { for (int count=to;count>mid;count--) { count1++; target = getSwapTarget(array, count, target); } } //继续对子列进行如此操作 sort(array, fromIndex, target-1); sort(array, target+1, endIndex); } //在目标数左边搜索第一个比目标数更大的 private int getFirstLarger(int[] array, int fromIndex, int mid) { for (int i=fromIndex;i<mid;i++) { count1++; if (array[i]>array[mid]) { return i; } } return -1; } //在目标数右边搜索第一个比它更小的 private int getFirstSmaller(int[] array, int fromIndex, int mid) { for (int i=fromIndex;i>mid;i--) { count1++; if (array[i]<array[mid]) { return i; } } return -1; } /** * 如果顺序不对,则互换位置 * * @param array * @param count * @param target * @return */ private int getSwapTarget(int[] array, int count, int target) { if (array[count]<array[target]&&count>target) { swap(array, count, target); target = count; } if (array[count]>array[target]&&count<target) { swap(array, count, target); target = count; } return target; } private void swap(int[] array, int a, int b) { int temp = array[a]; array[a] = array[b]; array[b] = temp; count2++; } private boolean isOutOfBound(int[] array, int index) { return index<0||index>=array.length; } private int getMid(int start, int end) { return (start+end)/2; } }
相关推荐
本文将深入浅出地介绍 C 语言中的 8 种经典排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序、基数排序、希尔排序和堆排序。这些算法都是在程序设计中常用的排序方法,了解这些算法对于程序员来说...
2048:【例5.18】串排序 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 20603 通过数: 10118 【题目描述】 对给定的n(1≤n≤20) 个国家名(国家名字长度不超过20 ),按其字母的顺序输出。 【输入】 第一行为国家...
2048:【例5.18】串排序 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 20456 通过数: 10024 【题目描述】 对给定的n(1≤n≤20) 个国家名(国家名字长度不超过20 ),按其字母的顺序输出。 【输入】 第一行为国家...
同时,学生可以尝试模仿这种排序方式写作,探索更多表达内容的方法,将读与写结合,深化对排序技巧的理解。 在实际的应用示例中,如第一题是关于日出场景的排序,根据日出的过程,我们可以确定正确的顺序是:②天边...
标题“无聊的盒子_单片机_舵机_无聊的盒子”揭示了这是一个与电子制作相关的项目,其中涉及单片机和舵机技术。在这个项目中,“无聊的盒子”可能是一个创新的装置,通过舵机来实现其开关功能,增加了互动性和趣味性...
无聊的关机cpp 无聊的关机cpp 无聊的关机cpp 无聊的关机cpp
WebSocket提供了一种双向通信方式,使得服务器和客户端可以同时发送数据,提高了交互性。在后端,服务器可能采用Node.js、Python的Flask或Django、Java的Spring Boot等技术栈,处理用户的连接和消息传递。 聊天室的...
人们 a) 感到无聊 b) 他们的反馈不一致。 图排序允许我们使用传递优势,并在反馈中具有循环(a>b>c>a)。 定义 在本文档中,优势被描述为“A>B”,这就像说“A 对 B 具有优势”。 如果我们有三个节点 A、B、C,并且...
【无聊建站系统源码解析】 “无聊建站系统”是一个基于Java开发的免费内容管理系统(CMS),专为快速、高效且安全地搭建各类网站而设计。作为一个专业的IT大师,我将详细介绍这个系统的特性和核心知识点,帮助你...
Java建站系统是一种基于Java技术构建的用于快速搭建网站的内容管理系统(CMS)。"无聊java建站系统模板"指的是一个特定的开源项目,旨在为用户提供便捷、高效且安全的建站解决方案。这个系统允许用户通过预设的模板...
【题目描述】 编程输入n(1≤n≤20)个小于1000非负整数,然后自动按从大到小的顺序输出。(冒泡排序) 【输入】 第一行,数的个数n; 第二行,n个非负整数。 【输出】 由大到小的n个非负整数,每个数占一行。
“无聊软件”是经贸学院论坛追梦管理团队无聊工作室开发的一款方便实用、解闷的小工具,经过压缩,减小代码和结合网站实时更新的功能,使软件现有大小只有40K。 绿色、无毒、无需安装,方便实用。软件主要有“万能...
这是一种无聊的Javascript框架。 目的是可视化排序算法的工作方式。 该项目是根据以下文件构建的: demo_array.js-数组包装器,它公开了一个小的api。 它的构造函数获取数组大小和一个Presenter对象。 presentor....
DIY了一个七个开关的无聊盒子,附件里包含了程序(keil5)和结构图(2016版的solidworks),物料清单可以去博客里看(https://blog.csdn.net/qq_39127371/article/details/107799245)
在快节奏、高效率的生活中,人们似乎越来越难以忍受孤独,科技的发展为人们提供了一种逃避无聊的方式——通过不断地进行线上社交和娱乐活动来“杀死”寂寞。 但这种持续的逃避,真的能够满足我们内心深处的需求吗?...
标题 "一个非常非常无聊的东西" 可能是在戏谑地表达这个软件或工具的独特性,它可能是一个非主流或者趣味性的应用,旨在让用户的键盘体验变得与众不同。在IT领域,有时候创新和趣味性的结合可以带来出人意料的用户...
无聊的c#作品无聊的c#作品无聊的c#作品无聊的c#作品
【标题】: "当厨师无聊时会做什么" 这个标题看似与IT行业不直接相关,但它实际上可以引发关于行业专业发展、职业兴趣多样化以及个人技能提升的讨论。在IT行业中,无论是程序员、设计师还是项目经理,都有可能经历...
无聊简史