《Java程序设计》实验1实验报告
20145318 《Java程序设计》实验1实验报告
实验题目
- 通过对500个数据进行操作,实现快速排序、选择排序、直接插入排序算法时间复杂度的比较;并在排序数据中快速查找某一数据,给出查找是否成功,以及数据所在的位置信息。
设计思路
- 本次实验利用数据结构实验的C转换成Java,设计思路见下图。
  
源代码
import java.util.Scanner;
class  Sort
{
	public static void main(String[] args)
	{
		int N=20;
		int[] a={5,2,8,9,4,3,1,7,0,6,15,12,18,19,14,13,11,17,10,16};
/*直接插入排序*/
		long beginTime1=System.currentTimeMillis();//计算时间
		for(int i=0;i<1000000;i++)
		InsertSort(a, N);
		long endTime1=System.currentTimeMillis();
		System.out.println(endTime1-beginTime1+" 毫秒");
		for (int i = 0; i < N; i++)
			System.out.printf("%d\t", a[i]);
		System.out.printf("\n");
/*快速排序*/
		long beginTime2=System.currentTimeMillis();//计算时间
		for(int i=0;i<1000000;i++)
		QuickSort(a, 0, N-1);
		long endTime2=System.currentTimeMillis();
		System.out.println(endTime2-beginTime2+" 毫秒");
		for (int i = 0; i < N; i++)
			System.out.printf("%d\t", a[i]);
		System.out.printf("\n");
/*选择排序*/
		long beginTime3=System.currentTimeMillis();//计算时间
		for(int i=0;i<1000000;i++)
		SelectSort(a, N);
		long endTime3=System.currentTimeMillis();
		System.out.println(endTime3-beginTime3+" 毫秒");
		for (int i = 0; i < N; i++)
			System.out.printf("%d\t", a[i]);
		System.out.printf("\n");
for(int i=0;i<2;i++){
/*快速查找(直接遍历查找)*/
		int add=0;
		System.out.printf("Input key=");
//输入数据
		Scanner sc = new Scanner(System.in);
		int key = sc.nextInt();
		while (add<N-1&&a[add] != key)
			add++;
		if (a[add]==key)
			System.out.printf("%d的位置为%d\n", key, add + 1);
		else
			System.out.printf("不存在%d\n", key);
		}
	}
/*直接插入排序:*/
	public static void InsertSort(int a[], int n)
	{
		int i, j, t;
		for (i = 1; i < n; i++)
		{
			t = a[i];
			for (j = i; j>0 && t < a[j - 1]; j--)
			{
				a[j] = a[j - 1];
			}
			a[j] = t;
		}
	}
/*快速排序:*/
	public static void QuickSort(int b[], int low, int high)
	{
		int i, j, middle;
		i = low;
		j = high;
		middle = b[low];
		while (i < j)
		{
			while (i < j&&middle <= b[j])
				j--;
			if (i < j)
			{
				b[i] = b[j];
				i++;
			}
			while (i < j&&b[i] < middle)
				i++;
			if (i < j)
			{
				b[j] = b[i];
				j--;
			}
		}
		b[i] = middle;
		if (low < i)
			QuickSort(b, low, i - 1);
		if (i < high)
			QuickSort(b, j + 1, high);
	}
/*选择排序:*/
	public static void SelectSort(int c[], int n)
	{
		int i, j, k, t;
		for (i = 0; i < n; i++)
		{
			k = i;
			for (j = i + 1; j < n;j++)
				if (c[k]>c[j])
					k = j;
				if (k != i)
				{
					t = c[i];
					c[i] = c[k];
					c[k] = t;
				}
		}
	}
}
结果截图
- 三种排序算法的结果和所消耗的时间分别显示,输入需要查找的关键字,若存在即输出位置,若不存在则说明。
  
问题及解决
Java中时间计算的语句与C中不同,这样比较方便。
	long beginTime3=System.currentTimeMillis();//计算时间
	执行语句
	long endTime3=System.currentTimeMillis();
	System.out.println(endTime3-beginTime3+" 毫秒");
排序过程可能耗时很短,可以通过循环执行排序来计算时间。
调试过程中出现了查找数组溢出的情况。
- 比较语句原代码: 
 - while (a[add] != key&&add<=N) add++; if (add>=0&&add<=N)····
- 问题: - &&先比较前者,为false即不比较后者;- add<=N不满足再跳出循环,此时已经执行到add=N,所以溢出。
- 改正后代码: 
 - while (add<N-1&&a[add] != key) add++; if (a[add]==key)....
- 改正:先判断add是否溢出再判断是否找到关键字;跳出循环时 - add++执行,此时add=N-1,不会溢出。
在一个类中,直接int N可以代替C中的#define N,但是多个类中用此方法定义常量不行。
PSP

其他(感悟、思考等,可选)
- 本次实验直接引用数据结构的C,在设计过程上没有费太多时间,在Java和C不同的地方做些修改。
- 排序算法比较基本,掌握其排序本质即可。
《Java程序设计》实验1实验报告的更多相关文章
- 20145330《Java程序设计》第一次实验报告
		20145330<Java程序设计>第一次实验报告 实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Ja ... 
- 20145320《Java程序设计》第一次实验报告
		20145320<Java程序设计>第一次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 18: ... 
- 20145317彭垚 《Java程序设计》第一次实验实验报告
		20145317彭垚 <Java程序设计>第一次实验实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验名称:Java开发环境的 ... 
- 20155339《java程序设计》第一次实验报告
		20155339<java程序设计>第一次实验报告 实验一 java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序: 2.使用IDEA编辑.编译.运行.调试java程 ... 
- 20144303 《Java程序设计》第一次实验实验报告
		20144303 <Java程序设计>第一次实验实验报告 北京电子科技学院(besti)实验报告 课程:java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 ... 
- 20145240 《Java程序设计》第一次实验报告
		20145240 <Java程序设计>第一次实验报告 实验内容 一.命令行下java程序开发 1.建立Code目录,输入mkdir 20145240命令建立实验目录,并使用dir命令查看目 ... 
- 《Java程序设计》课程实验要求
		目录 <Java程序设计>课程实验要求 注册实验楼账号 实验一 Java开发环境的熟悉 实验二<Java面向对象程序设计> 实验三 <敏捷开发与XP实践> 实验四 ... 
- 20145127《java程序设计》第一次实验
		<java程序设计>第一次实验 实验内容及其步骤 1.使用JDK编写简单的Java小程序: Java编译的方法有很多,最基础最简单的就是使用命令行,记事本,Java虚拟机直接进行编译,下面 ... 
- #《JAVA程序设计》 20155214 实验五 网络编程与安全
		<JAVA程序设计> 20155214 实验五 网络编程与安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验要求 要求一 结对实现中缀表达式转后缀 ... 
- 《JAVA程序设计》 20155208 实验四 Android程序设计
		<JAVA程序设计> 20155208 实验四 Android程序设计 实验一: 实验要求: Android Stuidio的安装测试: 参考<Java和Android开发学习指南( ... 
随机推荐
- kafka服务器搭建与测试
			kafka服务器搭建 kafka自身集群信息的管理以及对producer和consumer的信息管理是通过zookeeper实现的,zookeepr是kafka不可分割的一部分,所以搭建zookeep ... 
- angular2+ 中封装调用递归tree
			子组件 given-person.html <!--权限设置-选择员工--> <li [class.noborder]="!dir.shierarchy" *n ... 
- 160614、Eclipse下JRebel6.2.0热部署插件安装、破解及配置
			标签: 这两天在做后台管理系统,前端框架用Bootstrap,后端用SpringMVC+Velocity.在开发过程中,经常需要对界面进行微调,调整传参等,每次更改一次java代码,就得重新部署一次, ... 
- ZOJ 3932 Deque and Balls
			There are n balls, where the i-th ball is labeled as pi. You are going to put n balls into a deque. ... 
- API网关+Kubernetes集群的架构替代了传统的Nginx(Ecs)+Tomcat(Ecs)
			API网关为K8s容器应用集群提供强大的接入能力_最佳实践_API 网关-阿里云 https://help.aliyun.com/document_detail/71623.html 在最后一节,我们 ... 
- vue下给title配置图标.ico
			在根目录下放入要作为浏览网站时看到的网页title里的图标.如 32*32 后缀为.ico的图 然后再项目中build文件夹中的,webpack.dev.conf.js文件加入一句代码,加入完重启即可 ... 
- Python并行编程(四):线程同步之RLock
			1.基本概念 如果想让只有拿到锁的线程才能释放该锁,那么应该使用RLock()对象.当需要在类外面保证线程安全,又要在类内使用同样方法的时候RLock()就很使用. RLock叫做Reentrant ... 
- app-framework学习--Scroller
			Scroller 这个插件同意你创建一个可滚动区域.我们使用的JavaScript滚轮,除非该设备支持 - WebKit的溢出卷轴:触摸.它有很多修复Android版<3和iOS原生的滚动. 创 ... 
- C的指针疑惑:C和指针13(高级指针话题)上
			int *f(); f为一个函数,返回值类型是一个指向整形的指针. int (*f)(); 两对括号,第二对括号是函数调用操作符,但第一对括号只起到聚组的作用. f为一个函数指针,它所指向的函数返回一 ... 
- IntelliJ IDEA的几个常用快捷键
			一.将IntelliJ IDEA的快捷键设置为Eclipse环境的快捷键 如果之前长期使用Eclipse作为开发工具的程序员在刚开始接触IDEA的时候肯定会很不习惯,所以如果你没有太多时间去研究的话可 ... 
