1. public static void main(String[] args) {
  2. int []arr = {300,310, 210,313,334,360,255,233,275,274,410,510,559,609};
  3. //对数组进行排序;
  4. FastSort.sort(arr, 0, arr.length - 1);
  5.  
  6. //输出控制台看看排序后的数据
  7. for (int i = 0; i < arr.length; i++) {
  8. System.out.print("====" + arr[i]);
  9. }
  10.  
  11. //用一个集合来装匹配的数据
  12. List<Integer> mylist = new ArrayList<Integer>();
  13.  
  14. //输出一个空白换行
  15. System.out.println();
  16.  
  17. //先把第一个最小的数据存起来
  18. mylist.add(arr[0]);
  19.  
  20. //记录最后保存的数据的索引
  21. int inIndex = 0;
  22. for (int i = 1; i < arr.length; i++) {
  23. //判断一下遍历的数据和最后一个保存的数据的距离,大于或等于50就保存
  24. if (arr[i] - arr[inIndex] >= 50) {
  25. mylist.add(arr[i]);
  26. inIndex = i;
  27. }
  28. }
  29.  
  30. //遍历保存的数据,看看对不对
  31. for (int i = 0; i < mylist.size(); i++) {
  32. System.out.print("====" + mylist.get(i));
  33. }
  34.  
  35. }

极速排序

  1. public class FastSort {
  2. /**
  3. * @Description 这个方法是用来把数组分分成两部分并根据参照点稍作位置调整数组元素位置的
  4. * @param arr 用来排序的数组
  5. * @param left 初始是数组的最左端索引,然后从第二次递归开始就由 point 决定,起到位置索引作用
  6. * @param right 初始是数组的最右端索引,然后从第二次递归开始就由 point 决定,起到位置索引作用
  7. * @param point 参照点,初始是初始是数组的最右端元素,然后从第二次递归开始就是 被划分成两部分的数组的两个最右端元素
  8. * @return int 和参照点类似,返回的是参照点所在位置的前一个位置
  9. * @throws
  10. */
  11. private static int partition(int[] arr, int left, int right, int point) {
  12. int leftP = left -1;//leftP起指针作用,记录准备要交换位置的元素的索引
  13. int rightP = right;//rightP起指针作用,记录准备要交换位置的元素的索引
  14. while(true){
  15. while (leftP < rightP && arr[++leftP] < point);//用参照点从左往右一直对比,直到找到比参照点大的数就停下
  16. while (rightP > leftP && arr[--rightP] > point);//用参照点从右往左一直对比,直到找到比参照点小的数就停下
  17. if (leftP >= rightP) {//如果条件符合,证明左右两头往中间已经相遇并对比完所有元素
  18. break;
  19. }else{
  20. int temp = arr[leftP];//用刚才左右两头停下所记录的位置交换元素,这里的交换只是把小的元素移到左边,大的移到右边
  21. arr[leftP] = arr[rightP];
  22. arr[rightP] = temp;
  23. }
  24. }
  25. int temp = arr[leftP];//当上面的while循环都停止后,leftP 所在位置的元素就是大于或等于 参照点 的元素,所以把最大的放后面
  26. arr[leftP] = arr[right];
  27. arr[right] = temp;
  28. return leftP;//返回左边开始的索引位置,用于下一轮切分数组
  29. }
  30.  
  31. /**
  32. * @Description 排序的方法,要用到递归
  33. * @param arr 用于排序的数组
  34. * @param left 这里的左并不一定是数组的最左索引位置,也有可能是数组切分后的左边
  35. * @param right 和 left 同理
  36. * @throws
  37. */
  38. public static void sort(int[] arr, int left, int right){
  39. if (left >= right) {//排序结束
  40. return;
  41. }else{
  42. int point = arr[right];//参照点是数组切分后的最右边元素
  43. int partition = partition(arr, left, right, point);//把数组切分,并把大于参照点的值放在右边,小于的放左,
  44. sort(arr, left, partition -1);//把切分后的数组继续且
  45. sort(arr, partition +1 , right);//切到最后就是排序结束,此时发现已经排好序了
  46. }
  47. }
  48.  
  49. public static void main(String[] args) {
  50. int[] arr = {19,4,6,65,15,2,0,12,13,20,25};
  51. sort(arr, 0, arr.length - 1);
  52. for (int i = 0; i < arr.length; i++) {
  53. System.out.print(arr[i]+" ");
  54. }
  55. }
  56.  
  57. }

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. 爬一下国家统计局行政区划代码C#

    目前NBS上有2015-2018四个年度的代码信息,写一个控制台程序爬一下县级行政区下的代码. 使用HttpWebRequest+HttpWebResponse获取html,使用HtmlAgility ...

  2. 蚂蚁爬杆问题js实现

    运行效果 代码 <!DOCTYPE html> <html> <head> <title>蚂蚁爬杆实验</title> <script ...

  3. 查找修补文件差异diff、patch

    diff patch -p1 diff -Naur directory1 directory2

  4. 20155324《网络对抗》Exp2 后门原理与实践

    20155324<网络对抗>Exp2 后门原理与实践 20155324<网络对抗>Exp2 后门原理与实践 常用后门工具实践 Windows获得Linux Shell 在Win ...

  5. order by 的用法

    select * from emp order by sal desc  --将员工工资按照由高到低的顺序排列

  6. Arduino常用的数据类型以及转换

    常用的数据类型有布尔类型.字符型.字节型.整型.无符号整型.长整型.无符号长整型.浮点型.双精度浮点型等 布尔类型bollean: 布尔值是一种逻辑值,其结果只能为真(true)或者假(false). ...

  7. java操作mongodb & springboot整合mongodb

    简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...

  8. 项目Alpha冲刺(2/10)

    1.项目燃尽图 2.今日进度描述 项目进展 完成数据库和服务器的连接部分,完成了一些应用的基本功能. 问题困难 第一次使用服务器,配置环境部署项目都花了很长时间,学习中存在许多问题. 心得体会 应该早 ...

  9. LaTex basics

    分节: \section{Supplemental Material}\label{sec:supplemental} 小节: \noindent {\bf Preparing References: ...

  10. Mac 装Sequel pro 连接 Mysql 8.0 失败、登录不了、loading问题

    最近都没更新博客,零零散散的笔记也都没整理,so 觉得还是不放上来了. 高兴的是入手了期待好久的水果机,开始了各种捣鼓,好想大撸一下代码啊.... 回到正轨,刚装了mysql8.0, 想装下mysql ...