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. cmake 递归依赖

    现在有3个模块:main.service.base,main依赖service的service.h.service依赖base的base.h,怎么写CMakeList.txt避免main直接耦合bas ...

  2. Spring Boot 2.x以后static下面的静态资源被拦截

    今天创建一个新的Spring Boot项目,没注意到spring boot的版本,发现静态资源无法访问.百度一下发现好像是Spring Boot 2.0版本以后static目录不能直接访问. 接下来直 ...

  3. exists,in的区别-mysql

    如说两张表一张是用户表TDefUser(userid,address,phone),一张是消费表TAccConsume(userid,time,amount),我要查消费超过5000的用户记录,那么我 ...

  4. 【摘】Oracle 11g EM安全证书问题无法访问的解决办法

    本文摘自:http://www.cnblogs.com/wenlong/p/5255673.html  感谢攻城师10946无私分享 OS: Windows7 x64 Oracle: 11g R2 x ...

  5. vue组件通讯方法汇总(在不使用vuex的情况下)

    前三种是父子组件通讯,最后一种是平级组件.

  6. JustSoso笔记

    当时想了大半天,想着到底要怎么绕过MD5呢,结果还是没做出来,即使问了学长,自己还是漏了一个步骤,file=hint.php,特此笔记,又学到了个引用变量的知识 学习自 https://www.ctf ...

  7. rsyncd启动脚本

    #!/bin/bash ############################################################## # File Name: -.sh # Versi ...

  8. Spring Cloud 之 服务注册与发现实战

    一. 启动Eureka Server集群 准备二台云主机,二个eureka server服务互相进行复制.准备二个application.yml配置,分别如下: application-server1 ...

  9. 算法——八皇后问题(eight queen puzzle)之回溯法求解

    八皇后谜题是经典的一个问题,其解法一共有种! 其定义: 首先定义一个8*8的棋盘 我们有八个皇后在手里,目的是把八个都放在棋盘中 位于皇后的水平和垂直方向的棋格不能有其他皇后 位于皇后的斜对角线上的棋 ...

  10. Flask+SQLAlchemy+alembic+Flask-RESTful使用

    前言 其实准备把这篇删掉,先写Flask-restful相关的,后来想想大体框架还是先写出来,这两天踩了很多坑,有的谷歌也没有答案.一直摸索也总算是开始了. 正文 SQLAlchemy/alembic ...