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实验报告的更多相关文章

  1. 20145330《Java程序设计》第一次实验报告

    20145330<Java程序设计>第一次实验报告 实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Ja ...

  2. 20145320《Java程序设计》第一次实验报告

    20145320<Java程序设计>第一次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 18: ...

  3. 20145317彭垚 《Java程序设计》第一次实验实验报告

    20145317彭垚 <Java程序设计>第一次实验实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验名称:Java开发环境的 ...

  4. 20155339《java程序设计》第一次实验报告

    20155339<java程序设计>第一次实验报告 实验一 java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的java程序: 2.使用IDEA编辑.编译.运行.调试java程 ...

  5. 20144303 《Java程序设计》第一次实验实验报告

    20144303 <Java程序设计>第一次实验实验报告 北京电子科技学院(besti)实验报告 课程:java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 ...

  6. 20145240 《Java程序设计》第一次实验报告

    20145240 <Java程序设计>第一次实验报告 实验内容 一.命令行下java程序开发 1.建立Code目录,输入mkdir 20145240命令建立实验目录,并使用dir命令查看目 ...

  7. 《Java程序设计》课程实验要求

    目录 <Java程序设计>课程实验要求 注册实验楼账号 实验一 Java开发环境的熟悉 实验二<Java面向对象程序设计> 实验三 <敏捷开发与XP实践> 实验四 ...

  8. 20145127《java程序设计》第一次实验

    <java程序设计>第一次实验 实验内容及其步骤 1.使用JDK编写简单的Java小程序: Java编译的方法有很多,最基础最简单的就是使用命令行,记事本,Java虚拟机直接进行编译,下面 ...

  9. #《JAVA程序设计》 20155214 实验五 网络编程与安全

    <JAVA程序设计> 20155214 实验五 网络编程与安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验要求 要求一 结对实现中缀表达式转后缀 ...

  10. 《JAVA程序设计》 20155208 实验四 Android程序设计

    <JAVA程序设计> 20155208 实验四 Android程序设计 实验一: 实验要求: Android Stuidio的安装测试: 参考<Java和Android开发学习指南( ...

随机推荐

  1. VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)

    转自:http://www.cnblogs.com/javaexam2/archive/2012/07/14/2632959.html ①需要一个别人写好的类CWebPage,将其对于的两个文件Web ...

  2. [移动云计算开发 01] 解决 windows 7 安装设置 nginx 出现端口占用的问题

    一开始 到nginx官网 http://nginx.org/en/download.html 下载 1.4.2版本,解压安装到自己希望设置的文件夹即可, 但是打开localhost却出现了 “NOT ...

  3. LeetCode 笔记系列 14 N-Queen II [思考的深度问题]

    题目: Follow up for N-Queens problem. Now, instead outputting board configurations, return the total n ...

  4. 160525、高并发之mysql主从复制(linux)

    第一步:新建两台linux主机(我这里是使用虚拟机,linux版本是CentOS-6.3-x86_64-bin-DVD1.iso,注意:我下载的是dvd1,如果其他版本默认安装可能会自动还原) 第二步 ...

  5. Bootstrap初学基础总结

    Bootstrap 1>.Web UI 框架 可以帮助菜鸟程序员 ,迅速简便的搭建起专业级界面效果 2>如何快速掌握利用框架 1.框架的整合和搭建,让框架能够正常跑起来 2.通过复制粘贴文 ...

  6. Code Forces 21 A(模拟)

    A. Jabber ID time limit per test 0.5 second memory limit per test 256 megabytes input standard input ...

  7. 20165330 实验一 Java开发环境的熟悉

    一.实验内容及步骤 使用JDK编译.运行简单的Java程序 使用命令 cd 20165330 进入到学号目录下 mkdir exp1新建文件夹 mkdir bin src建立bin src目录 vim ...

  8. null array mysqli_fetch_assoc ( mysqli_result $result ) void mysqli_free_result ( mysqli_result $result )

    w取最大db_id. if($row=null){ var_dump(123); } var_dump($row); if($rowb=array('ww','w123')){ var_dump(23 ...

  9. 会议室预订系统 td 宽度 php 浏览器 兼容性

    w获取浏览器标识 <style> .w > td { <?php $wua=$_SERVER['HTTP_USER_AGENT']; if(strpos($wua, 'Chro ...

  10. vue下给title配置图标.ico

    在根目录下放入要作为浏览网站时看到的网页title里的图标.如 32*32 后缀为.ico的图 然后再项目中build文件夹中的,webpack.dev.conf.js文件加入一句代码,加入完重启即可 ...