java int数组任何数之间间隔不能对于指定数,内付极速排序
public static void main(String[] args) {
int []arr = {300,310, 210,313,334,360,255,233,275,274,410,510,559,609};
//对数组进行排序;
FastSort.sort(arr, 0, arr.length - 1); //输出控制台看看排序后的数据
for (int i = 0; i < arr.length; i++) {
System.out.print("====" + arr[i]);
} //用一个集合来装匹配的数据
List<Integer> mylist = new ArrayList<Integer>(); //输出一个空白换行
System.out.println(); //先把第一个最小的数据存起来
mylist.add(arr[0]); //记录最后保存的数据的索引
int inIndex = 0;
for (int i = 1; i < arr.length; i++) {
//判断一下遍历的数据和最后一个保存的数据的距离,大于或等于50就保存
if (arr[i] - arr[inIndex] >= 50) {
mylist.add(arr[i]);
inIndex = i;
}
} //遍历保存的数据,看看对不对
for (int i = 0; i < mylist.size(); i++) {
System.out.print("====" + mylist.get(i));
} }
极速排序
public class FastSort {
/**
* @Description 这个方法是用来把数组分分成两部分并根据参照点稍作位置调整数组元素位置的
* @param arr 用来排序的数组
* @param left 初始是数组的最左端索引,然后从第二次递归开始就由 point 决定,起到位置索引作用
* @param right 初始是数组的最右端索引,然后从第二次递归开始就由 point 决定,起到位置索引作用
* @param point 参照点,初始是初始是数组的最右端元素,然后从第二次递归开始就是 被划分成两部分的数组的两个最右端元素
* @return int 和参照点类似,返回的是参照点所在位置的前一个位置
* @throws
*/
private static int partition(int[] arr, int left, int right, int point) {
int leftP = left -1;//leftP起指针作用,记录准备要交换位置的元素的索引
int rightP = right;//rightP起指针作用,记录准备要交换位置的元素的索引
while(true){
while (leftP < rightP && arr[++leftP] < point);//用参照点从左往右一直对比,直到找到比参照点大的数就停下
while (rightP > leftP && arr[--rightP] > point);//用参照点从右往左一直对比,直到找到比参照点小的数就停下
if (leftP >= rightP) {//如果条件符合,证明左右两头往中间已经相遇并对比完所有元素
break;
}else{
int temp = arr[leftP];//用刚才左右两头停下所记录的位置交换元素,这里的交换只是把小的元素移到左边,大的移到右边
arr[leftP] = arr[rightP];
arr[rightP] = temp;
}
}
int temp = arr[leftP];//当上面的while循环都停止后,leftP 所在位置的元素就是大于或等于 参照点 的元素,所以把最大的放后面
arr[leftP] = arr[right];
arr[right] = temp;
return leftP;//返回左边开始的索引位置,用于下一轮切分数组
} /**
* @Description 排序的方法,要用到递归
* @param arr 用于排序的数组
* @param left 这里的左并不一定是数组的最左索引位置,也有可能是数组切分后的左边
* @param right 和 left 同理
* @throws
*/
public static void sort(int[] arr, int left, int right){
if (left >= right) {//排序结束
return;
}else{
int point = arr[right];//参照点是数组切分后的最右边元素
int partition = partition(arr, left, right, point);//把数组切分,并把大于参照点的值放在右边,小于的放左,
sort(arr, left, partition -1);//把切分后的数组继续且
sort(arr, partition +1 , right);//切到最后就是排序结束,此时发现已经排好序了
}
} public static void main(String[] args) {
int[] arr = {19,4,6,65,15,2,0,12,13,20,25};
sort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
} }
java int数组任何数之间间隔不能对于指定数,内付极速排序的更多相关文章
- Java 找到数组中两个元素相加等于指定数的所有组合
思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增 ...
- java实现 数组中两个元素相加等于指定数的所有组合
package com.algorithm.hash; public class alg1 { public static void main(String argv[]) { int[] arr ...
- java中 数组 list map之间的互转
三者之间转换关系,一张图清晰呈现. 上代码: 其中的maputils是apache的collection包. package util; import java.util.ArrayList; imp ...
- java int和String类型之间的相互转换
String --> int 第一种方法:int i = Integer.parseInt(s); 第二种方法:int i = Integer.valueOf(s).intValue(); 两种 ...
- Java中int类型和tyte[]之间转换及byte[]合并
JAVA基于位移的 int类型和tyte[]之间转换 [java] view plaincopy /** * 基于位移的int转化成byte[] * @param int number * @retu ...
- java获取一年的周数和间隔天数
java获取一年的周数和间隔天数 import java.text.ParseException; import java.text.SimpleDateFormat; import java.uti ...
- java字符数组char[]和字符串String之间的转换
java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...
- java关于数组之间的相互赋值
java中数组是被当作对象看待,假设a,b为两个已经初始化的数组,那么语句a=b就表示把b数组对象的引用赋值给a,那么a和b就指向了同一个数组,无论用哪个来操作都影响其指向的数组.原来a指向的数组现在 ...
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
一个int数组, 比如 array[],里面数据无任何限制,要求求出 所有这样的数array[i],其左边的数都小于等于它,右边的数都大于等于它.能否只用一个额外数组和少量其它空间实现. 分析:这题很 ...
随机推荐
- AFM论文精读
深度学习在推荐系统的应用(二)中AFM的简单回顾 AFM模型(Attentional Factorization Machine) 模型原始论文 Attentional Factorization M ...
- 一段充满bug的R程序,慎入 ...
twitter的AnomalyDetection 官网效果图如下: 尝试写了下面这个R程序: get_specify_df <- function(start_ts,stop_ts,categ ...
- MYCP作业
本次作业主要复习了输入流输出流的内容 作业要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt ...
- JetBrain server certificate is not trusted 弹出框
To get rid of the pop up message go to below location and click on Accept non-trusted certificates a ...
- GBDT原理及利用GBDT构造新的特征-Python实现
1. 背景 1.1 Gradient Boosting Gradient Boosting是一种Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向.损失函数是 ...
- Python3:输出当前目录所有文件的第二种方式-walk()函数
上一篇,我们讲了用递归的方式输入所有文件路径,其实os还提供了一个好用的方法-walk() 简单看一下: 中文大意就是: 返回的是一个三元tupple(dirpath, dirnames, filen ...
- 用CSS实现加载的动画效果
用纯CSS实现加载的一些动态效果,可以把加载效果中的元素分成很多个小部分,每个部分都有动画,每个部分的动画再设置相应的延迟效果,这样,看起来就是连贯的加载动画效果.代码如下: 1.效果1 <di ...
- (四)ORBSLAM运动估计
ORBSLAM2的运动估计简介 ORBSLAM2中的运动估计核心方法就是3D-2D的PNP,而在跟踪过程主要分为三种类型: 无运动模型的跟踪,即基于参考帧的跟踪: 基于匀速运动模型的跟踪: 重定位: ...
- 003 爬虫持久化的三个不同数据库的python代码
MongoDB import pymongo # 1.连接MongoDB服务 mongo_py = pymongo.MongoClient() print(mongo_py) # 2.库和表的名字:有 ...
- MVC或WebAPI发布后报错404问题的总结
在MVC项目或者webAPI项目发布之后有时会发生404错误.针对这种错误的解决办法: 解决办法1(不推荐):在webconfig中 <system.webServer> 节点下 添加 & ...