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. Python——一个简单的类的创建和应用

    1.创建类,设置属性和给属性设定默认值,设置方法并访问类的属性: 2.利用类创建多个实例,以及调用类的方法的两种办法: 3.设置更新属性的函数,并更新实例的属性. class dog(object): ...

  2. 获取iframe 内容

    parent.$.find("iframe")[0].contentWindow.getvalue(); h.find("iframe")[0].content ...

  3. 记录一个使用HttpClient过程中的一个bug

    最近用HttpClient进行链接请求,开了多线程之后发现经常有线程hang住,查看线程dump java.lang.Thread.State: RUNNABLE at java.net.Socket ...

  4. Linux的简单命令

    Linux的简单命令 1.更改linux服务器的登录密码 成功登录后输入命令: passwd 然后按照提示操作即可 2.在当前路径下新建文件夹:mkdir 新建文件夹名 3.解压和压缩文件tar.gz ...

  5. Java 多线程 - Java对象头, Monitor

    详见: http://www.cnblogs.com/pureEve/p/6421273.html

  6. hihocoder 1176

    hihocoder 1176 题意:N,M.分别表示岛屿数量和木桥数量,一笔画 分析:欧拉路问题(给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路) 欧拉路的条件 一个无向 ...

  7. 【转】一文掌握 Linux 性能分析之网络篇(续)

    [转]一文掌握 Linux 性能分析之网络篇(续) 在上篇网络篇中,我们已经介绍了几个 Linux 网络方向的性能分析工具,本文再补充几个.总结下来,余下的工具包括但不限于以下几个: sar:统计信息 ...

  8. Appnium-API-Dvice

    Device Activity Start Activity Start an Android activity by providing package name and activity name ...

  9. gym 102059A 树链剖分后odt维护区间

    题意 一棵树 多次修改,每次修改一个点到根的所有边的颜色,并询问现在有哪些颜色染了恰好$m$条边 题解: 稍加思考可以知道,从某个点到根节点的颜色数,均摊复杂度很低,因此,可以考虑珂朵莉树维护重链剖分 ...

  10. 在虚拟机里连接PLC S7-200

    1-使用PPI线连接 这次选择了在虚拟机里面来调试PLC,s7-200的型号是214-2AD23-0XB8 ,连接线是在淘宝上卖的(连接),在虚拟机里面试的时候没有反应,如下 在设备管理器里面观察,在 ...