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数组任何数之间间隔不能对于指定数,内付极速排序的更多相关文章

  1. Java 找到数组中两个元素相加等于指定数的所有组合

    思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增 ...

  2. java实现 数组中两个元素相加等于指定数的所有组合

      package com.algorithm.hash; public class alg1 { public static void main(String argv[]) { int[] arr ...

  3. java中 数组 list map之间的互转

    三者之间转换关系,一张图清晰呈现. 上代码: 其中的maputils是apache的collection包. package util; import java.util.ArrayList; imp ...

  4. java int和String类型之间的相互转换

    String --> int 第一种方法:int i = Integer.parseInt(s); 第二种方法:int i = Integer.valueOf(s).intValue(); 两种 ...

  5. Java中int类型和tyte[]之间转换及byte[]合并

    JAVA基于位移的 int类型和tyte[]之间转换 [java] view plaincopy /** * 基于位移的int转化成byte[] * @param int number * @retu ...

  6. java获取一年的周数和间隔天数

    java获取一年的周数和间隔天数 import java.text.ParseException; import java.text.SimpleDateFormat; import java.uti ...

  7. java字符数组char[]和字符串String之间的转换

    java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...

  8. java关于数组之间的相互赋值

    java中数组是被当作对象看待,假设a,b为两个已经初始化的数组,那么语句a=b就表示把b数组对象的引用赋值给a,那么a和b就指向了同一个数组,无论用哪个来操作都影响其指向的数组.原来a指向的数组现在 ...

  9. 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。

    一个int数组, 比如 array[],里面数据无任何限制,要求求出 所有这样的数array[i],其左边的数都小于等于它,右边的数都大于等于它.能否只用一个额外数组和少量其它空间实现. 分析:这题很 ...

随机推荐

  1. 挖矿病毒、ddos入侵流程及溯源

    一 挖矿病毒简介  攻击者利用相关安全隐患向目标机器种植病毒的行为. 二 攻击方式 攻击者通常利用弱口令.未授权.代码执行.命令执行等漏洞进行传播.示例如下: 示例1:   POST /tmUnblo ...

  2. 解决本地SqlServer无法连接远程服务器数据库,错误10060

    本地SqlServer 连不上服务器的数据库环境,错误信息如下图,折腾来折腾去,最终还是解决了 第一步 查看服务器本地端口是否已经打开,查看方法:首先向C:\Windows\System32文件夹添加 ...

  3. Apple Tree POJ - 2486 (树形dp)

    题目链接: D - 树形dp  POJ - 2486 题目大意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值 学习网址:https://blog.c ...

  4. 使用Promise发送多个异步请求, 全部完成后再执行

    const datas = idList .map(id => url+'/id') .map(url => fetch(url).then(res => res.json())); ...

  5. 关于t,f test

    我也是佛了 这么基础的概念其实每次都会搞混一些 首先我们针对variance求一个estimator s 然后对于任意置信区间 (sample mean +- 你所需的置信百分比的t * SE(SE就 ...

  6. 吴恩达《机器学习》编程作业——machine-learning-ex1:线性回归

    ❄❄❄❄❄❄❄❄[回到目录]❄❄❄❄❄❄❄❄ 本次编程作业中,需要完成的代码有如下几部分: [⋆] warmUpExercise.m - Simple example function in Octa ...

  7. 机器学习基石8-Noise and Error

    注: 文章中所有的图片均来自台湾大学林轩田<机器学习基石>课程. 笔记原作者:红色石头 微信公众号:AI有道 上一节课,我们主要介绍了VC Dimension的概念.如果Hypothese ...

  8. java8---lambda表达式

    语法糖 lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块).Lambda表 ...

  9. react 常见api 使用(长期更新)

    1.父子通信 1.1 父-子 props 父组件: class myPage extends React.Component { render() { return ( <div> {/* ...

  10. Android回调监听的实现

    一.首先定义监听函数 public interface OnKeyValueListener { void getKeyValueClick(String value); } 二.在需要传递内容的 A ...