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],其左边的数都小于等于它,右边的数都大于等于它.能否只用一个额外数组和少量其它空间实现. 分析:这题很 ...
随机推荐
- Excel表格中依据某一列的值,将这列中一样的数据放在一个文件中。
一需求:按照标题C的内容,一样的数据整理到一个文件中. 二.操作: 1.atl+F11弹出vb窗口 2.点击 插入===>模块 ,复制以下代码,注意这是一个表头为三行的函数(保存 ...
- python super参数错误
# -*- coding:utf-8 _*-"""@author:Administrator@file: yamlparser.py@time: 2018/09/07&q ...
- SQL server存储过程,触发器,游标相关实例
use MySchool go alter proc P_stu as select AVG(StudentResult)as 平均分 from Result select * from Result ...
- Java IO与网络编程笔记
<!doctype html>Java IO&NIO figure:first-child { margin-top: -20px; } #write ol, #write ul ...
- 内核模块加载错误 “Invalid module format” 解决办法
参考链接: http://blog.chinaunix.net/uid-20448327-id-172345.html
- 查询SQL Server执行过的SQL语句
SELECT TOP 1000 ST.text AS '执行的SQL语句', QS.execution_count AS '执行次数', QS.total_ ...
- 一、Python学习之路
基础篇 第一章 Python介绍.安装.使用 Python 简介 Python 安装 第一个Python程序 Python 解释器 字符编码与解码 动态语言与静态语言的区别 变量及简单 ...
- 微信商户/H5支付申请 被拒原因:网站存在不实内容或不安全信息
看到这张图片,申请H5支付的朋友估计是崩溃的,被拒的原因是网站存在不实内容或不安全信息. 解决方法有两种: 针对不安全内容,则是微信支付审核团队认为你的网站存在安全漏洞的,需要修复. 针对不实内容,则 ...
- 2018-2019-2 20165221『网络对抗技术』Exp4:恶意代码分析
2018-2019-2 20165221『网络对抗技术』Exp4:恶意代码分析 实验要求: 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后 ...
- pwnable.tw applestore
存储结构 0x804B070链表头 struct _mycart_binlist { int *name; //ebp-0x20 int price; //ebp-0x1c struct _mycar ...