《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开发学习指南( ...
随机推荐
- Tomcat Server启动报错:Multiple Contexts have a path of "/east".
原因是 conf/server.xml 文件中多了一个<Context></Context>标签,路径有重复,把他删掉就好了.
- 解析oracle的rownum,数据库查询结果返回行数设置
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀 ...
- Java使用Commons-FileUpload组件实现文件上传最佳方案
学习的目标 使用commons-fileupload实现文件上传 使用commons-fileupload封装文件上传工具类 什么是commons-fileupload? The CommonsF ...
- tomcat https 证书生成与配置
第一步:生成证书 命令行输入: keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore &quo ...
- (转)Java DecimalFormat 用法(数字格式化)
我们经常要将数字进行格式化,比如取2位小数,这是最常见的.Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是常用的例子: import java.tex ...
- uitextFiled字数输入限制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...
- webpack4学习笔记(三)
webpack打包资源文件 1,打包css文件,先安装css-loader和style-loader npm install --save-dev css-loader style-loader we ...
- Spark源码分析 – SchedulerBackend
SchedulerBackend, 两个任务, 申请资源和task执行和管理 对于SparkDeploySchedulerBackend, 基于actor模式, 主要就是启动和管理两个actor De ...
- javascrpt 页面格式化页面
下面这个页面,格式化javaScript <html> <head> <title>JS格式化工具 </title> <meta http-equ ...
- J.U.C Atomic(一)CAS原理
CAS概念 CAS:Compare And Swap,比较并交换.java.util.concurrent包完全是建立于CAS机制之上的. CAS原理 Java CAS是通过调用Unsafe的nati ...