随记1

public class MainTest {

	public static void main(String[] args) {
		int[] arr1 = { 121, 66, 24, 18, 94, 31, 55, 22, 37, 53, 89 };
		Arrays.sort(arr1);
		for (int i = 0; i < arr1.length; i++) {
			System.out.print(" " + arr1[i] + " ");
		}
		System.out.println();

		// 鸡尾酒排序法
		int[] sorts = { 21, 101, 33, 55, 64, 27, 87, 23, 69, 54, 32 };
		sorts = cocktailSort(sorts);
		int[] sortsq = new int[sorts.length];
		int j = 0;
		for (int i = sorts.length - 1; i >= 0; i--) {
			sortsq[j] = sorts[i];
			j++;
		}
		print(sortsq);

		System.out.println();
		// 合并数组
		int[] merge = MergeList(arr1, sortsq);
		if (merge != null) {
			print(merge);
		}

	}

	/**
	 * 鸡尾酒排序 数组中的数字本是无规律的排放,先找到最小的数字, 把他放到第一位, 然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,
	 * 再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。 时间复杂度O(n2)
	 * 
	 * @param src
	 *            无序的数组
	 * @return 从大到小的数组
	 */
	public static int[] cocktailSort(int[] src) {
		// 将最小值排到队尾
		for (int i = 0; i < src.length / 2; i++) {
			for (int j = i; j < src.length - i - 1; j++) {
				if (src[j] < src[j + 1]) {
					int temp = src[j];
					src[j] = src[j + 1];
					src[j + 1] = temp;
				}
			}
			// 将最大值排到队头
			for (int j = src.length - 1 - (i + 1); j > i; j--) {
				if (src[j] > src[j - 1]) {
					int temp = src[j];
					src[j] = src[j - 1];
					src[j - 1] = temp;
				}
			}
		}
		return src;
	}

	/**
	 * 合并两个数组
	 * 
	 * @param a数组
	 * @param b数组
	 * @return 合并在一起的数组
	 */
	public static int[] MergeList(int a[], int b[]) {
		int result[];
		// 检查传入的数组是否是有序的
		if (checkSort(a) && checkSort(b)) {
			result = new int[a.length + b.length];
			int i = 0, j = 0, k = 0; // i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组
			while (i < a.length && j < b.length)
				if (a[i] <= b[j]) {
					result[k++] = a[i++];
				} else {
					result[k++] = b[j++];
				}
			/* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 */
			while (i < a.length) {
				result[k++] = a[i++];
			}
			while (j < b.length) {
				result[k++] = b[j++];
			}
			return result;
		} else {
			System.out.print("非有序数组,不可排序!");
			return null;
		}
	}

	/**
	 *  检查数组是否是顺序存储的
	 * @param a 数组
	 * @return true / false
	 */
	public static boolean checkSort(int a[]) {
		boolean change = true; // 这个标志位是一种优化程序的方法,可以看看我写的冒泡排序优化就会明白了
		for (int i = 0; i < a.length - 1 && change; i++) {
			for (int j = i + 1; j < a.length; j++)
				if (a[j - 1] > a[j])
					return false;
				else
					change = false;
		}
		return true;
	}

	// 打印函数
	public static void print(int b[]) {
		for (int i = 0; i < b.length; i++) {
			System.out.print(" " + b[i] + (i % 10 == 9 ? " " : " "));
		}
	}
}
时间: 2024-11-25 21:59:18

随记1的相关文章

微信运动记步原理,及刷步数方法大揭密

随着"微信运动"功能的开启,朋友圈里燃起了每天刷步的热情,每天为了争夺运动封面第一名,不惜下班还在楼下多绕一圈儿再回家.那么你们都知道微信运动是如何记录我们每日行程步数的吗?这个数据到底准不准确呢?今天小编就为大家来一个大揭密. 原理: 手机内置了振动传感器或协助处理器,根据这些设备的震动频率来储存数据.简单地说,就是人在步行时重心都有一点上下移动,传感器和协作器感应到这种重心移动并进行记数. 设备: iPhone 5S/6/6 Plus三款苹果手机因为自带M7/M8协处理器,无需任何

.NET Core爬坑记 1.0 项目文件

前言: 之所以要写这个系列是因为在移植项目到ASP.NET Core平台的过程中,遇到了一些“新变化”,这些变化有编译方面的.有API方面的,今天要讲的是编译方面的一些问题.我把它们整理后分享出来,以便各位博友不要再遇到这些坑. 在Dotnet Core RC2版本中,project.json 管理着整个项目,包括编译文件.依赖包管理.版本信息.平台依赖与发布等功能. 关于项目中引用: 比如我们一般看到Project.json中一般会有如下内容: "dependencies": { &

最美的时光在路上 - 记第一次深马

昨天跑了深圳马拉松的半马,这是我的第二马,家门口跑马还是有些兴奋的,就因为这个兴奋劲儿,凌晨两点才入睡,朦朦胧胧睡了三个小时,5点半就不得不爬起来洗洗涮涮了,吃了准备好的早餐,坐第一班地铁奔赴市民中心,到达市民中心,已经是人山人海了,各方跑友汇聚于此.话说,这两年跑步是越来越火,我是觉得和现在各种跑步APP的兴起有关,有了这些记步APP,跑了步晒下,朋友们点点赞,这些正向反馈让你跑步的心气就有更足了,其他运动可能很难通过什么APP有这样的体验. 时间紧,存了包,就赶紧往起点一点点的挤(人多,真的

基于Android的计步器(Pedometer)的讲解(四)——后台记步

今天先不说Pedometer(计步器)项目UI方面的了,今天讲一个基于重力加速度的记步功能传感器(Sensor),然后 在后台开启记步. 计步器(Pedometer)整个项目的源代码,感兴趣的朋友可以下载来看看(记得帮小弟在github打个星~) https://github.com/296777513/pedometer 先上几张效果图:(效果和上一篇讲到的CircleBar非常的相似,因为记步功能在后台) 如图所示,能根据你的一些基本参数,来记步.有一个缺点,因为这个是根据感应加速度来计算是

记一次varnish异常/故障

公司一varnish集群运行很久了,一直很稳定,没发现什么问题.最近开发那边反馈新传的静态文件访问不了.出现以下错误: Error 503 Service Unavailable Guru Meditation: XID: 1267841165 cache server 5443 检查varnish启动配置, ps -ef | grep varnish usr/sbin/varnishd -P /var/run/varnish.pid -a :80 -f /etc/varnish/default

ACM退役记&amp;&amp;回忆录

ACM退役记 2017.9.19星期二,"九一八事变"八十六年后的第二天,永远记住这个日子,刚好是我报名ACM到现在,刚好满一年,而今天正是我注册杭州电子科技大学OJ的时间(就是这一天报名的),附上小图一张! 嗯,我退役了,真的退役了,从此告别了ACM的生涯,虽然有很多遗憾,虽然有很多不舍,虽然有很多很多不情愿,但是,,,还是没能阻止这一天的到来,可能你们会认为我退役的有点早,可能你们也会有很多疑惑,为啥这么优秀这么强的大佬竟然退役的这么早...(自嘲一下,其实菜的一逼) 其实这个原因

踩坑记(1)——使用slf4j+logback记录日志

jar包版本: <spring.version>3.1.0.RELEASE</spring.version> <slf4j.version>1.7.25</slf4j.version> <logback.version>1.2.3</logback.version> <logback.ext.version>0.1.1</logback.ext.version> commons-logging:scope为pr

记一次django的诡异报错 Could not parse the remainder: &#39;=&#39; from &#39;=&#39;

如题,一个展示日志的功能,调用该模板文件时报错,Could not parse the remainder: '=' from '='.这行模板语言在上面出现过同样的,仅仅是改了'<='右端的整数大小,而且该有的标签也不少. 百般思考无解,stackoverflow和百度都没答案.后来重新看了下开发文档,发现是Django的版本不对,开发时用的1.8.2,我部署时用的1.11.5.重新安装低版本的django后问题解决.但原因仍待查. 记一次django的诡异报错 Could not parse

Linux随记

1. 设置 极点五笔 自动上屏 默认情况下,ibus-table不开启直接上屏模式(即敲完四个码,没有重码时,直接显示到屏幕上),在五笔输入法下 Ctrl + / 即可. Linux随记,码迷,mamicode.com

好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can&#39;t be established. 的问题

The authenticity of host 'git.coding.net (123.59.85.184)' can't be established.RSA key fingerprint is SHA256:jok3FH7q5LJ6qvE7iPNehBgXRw51ErE77S0Dn+Vg/Ik.Are you sure you want to continue connecting (yes/no)? 用ssh登录一个机器(换过ip地址),提示输入yes后,屏幕不断出现y,只有按ctr