20145318 《Java程序设计》实验1实验报告

实验题目

  • 通过对500个数据进行操作,实现快速排序、选择排序、直接插入排序算法时间复杂度的比较;并在排序数据中快速查找某一数据,给出查找是否成功,以及数据所在的位置信息。

设计思路

  • 本次实验利用数据结构实验的C转换成Java,设计思路见下图。

源代码

  1. import java.util.Scanner;
  2. class Sort
  3. {
  4. public static void main(String[] args)
  5. {
  6. int N=20;
  7. int[] a={5,2,8,9,4,3,1,7,0,6,15,12,18,19,14,13,11,17,10,16};
  8. /*直接插入排序*/
  9. long beginTime1=System.currentTimeMillis();//计算时间
  10. for(int i=0;i<1000000;i++)
  11. InsertSort(a, N);
  12. long endTime1=System.currentTimeMillis();
  13. System.out.println(endTime1-beginTime1+" 毫秒");
  14. for (int i = 0; i < N; i++)
  15. System.out.printf("%d\t", a[i]);
  16. System.out.printf("\n");
  17. /*快速排序*/
  18. long beginTime2=System.currentTimeMillis();//计算时间
  19. for(int i=0;i<1000000;i++)
  20. QuickSort(a, 0, N-1);
  21. long endTime2=System.currentTimeMillis();
  22. System.out.println(endTime2-beginTime2+" 毫秒");
  23. for (int i = 0; i < N; i++)
  24. System.out.printf("%d\t", a[i]);
  25. System.out.printf("\n");
  26. /*选择排序*/
  27. long beginTime3=System.currentTimeMillis();//计算时间
  28. for(int i=0;i<1000000;i++)
  29. SelectSort(a, N);
  30. long endTime3=System.currentTimeMillis();
  31. System.out.println(endTime3-beginTime3+" 毫秒");
  32. for (int i = 0; i < N; i++)
  33. System.out.printf("%d\t", a[i]);
  34. System.out.printf("\n");
  35. for(int i=0;i<2;i++){
  36. /*快速查找(直接遍历查找)*/
  37. int add=0;
  38. System.out.printf("Input key=");
  39. //输入数据
  40. Scanner sc = new Scanner(System.in);
  41. int key = sc.nextInt();
  42. while (add<N-1&&a[add] != key)
  43. add++;
  44. if (a[add]==key)
  45. System.out.printf("%d的位置为%d\n", key, add + 1);
  46. else
  47. System.out.printf("不存在%d\n", key);
  48. }
  49. }
  50. /*直接插入排序:*/
  51. public static void InsertSort(int a[], int n)
  52. {
  53. int i, j, t;
  54. for (i = 1; i < n; i++)
  55. {
  56. t = a[i];
  57. for (j = i; j>0 && t < a[j - 1]; j--)
  58. {
  59. a[j] = a[j - 1];
  60. }
  61. a[j] = t;
  62. }
  63. }
  64. /*快速排序:*/
  65. public static void QuickSort(int b[], int low, int high)
  66. {
  67. int i, j, middle;
  68. i = low;
  69. j = high;
  70. middle = b[low];
  71. while (i < j)
  72. {
  73. while (i < j&&middle <= b[j])
  74. j--;
  75. if (i < j)
  76. {
  77. b[i] = b[j];
  78. i++;
  79. }
  80. while (i < j&&b[i] < middle)
  81. i++;
  82. if (i < j)
  83. {
  84. b[j] = b[i];
  85. j--;
  86. }
  87. }
  88. b[i] = middle;
  89. if (low < i)
  90. QuickSort(b, low, i - 1);
  91. if (i < high)
  92. QuickSort(b, j + 1, high);
  93. }
  94. /*选择排序:*/
  95. public static void SelectSort(int c[], int n)
  96. {
  97. int i, j, k, t;
  98. for (i = 0; i < n; i++)
  99. {
  100. k = i;
  101. for (j = i + 1; j < n;j++)
  102. if (c[k]>c[j])
  103. k = j;
  104. if (k != i)
  105. {
  106. t = c[i];
  107. c[i] = c[k];
  108. c[k] = t;
  109. }
  110. }
  111. }
  112. }

结果截图

  • 三种排序算法的结果和所消耗的时间分别显示,输入需要查找的关键字,若存在即输出位置,若不存在则说明。

问题及解决

Java中时间计算的语句与C中不同,这样比较方便。

  1. long beginTime3=System.currentTimeMillis();//计算时间
  2. 执行语句
  3. long endTime3=System.currentTimeMillis();
  4. 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. Objective-C代码学习大纲(2)

    2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...

  2. 云服务器 ECS Linux 保存用户登录操作命令记录

    转载自 : https://help.aliyun.com/knowledge_detail/41210.html 云服务器 ECS Linux 如果要保存用户登录操作记录,则可以通过在 /etc/p ...

  3. Struts2的CRUD操作

    Struts之CRUD 1何为CRUD:CRUD代表的是一个框架的Create(增),Read(读取),update(更新),Delete(删除) 2怎么做呢?? 其实Struts2的CRUD与现实的 ...

  4. Python全栈day13(作业讲解字典嵌套实现用户输入地址信息添加及查看)

    要求: 列出字典对应节点名称,根据用户输入可以添加节点,查看节点等功能,这里以地址省-市-县等作为列子,此题熟悉字典嵌套功能 vim day13-16.py db = {} path = [] whi ...

  5. Googlebot (Google Web search)

    w推测“域名解析过程中,Google crawlers中首先是Googlebo中的Google Web search上阵”. +-----+----------------+------------- ...

  6. 浏览器端js处理or直接冗余至服务器php处理?

    w交给客户端浏览器js处理,减少向服务器的提交字节.精简处理逻辑.

  7. trust an HTTPS connection

    https://zh.wikipedia.org/wiki/传输安全协议 SSL协议客户端要收发几个握手信号: 发送一个“ClientHello”消息,内容包括:支持的协议版本,比如TLS1.0版,一 ...

  8. artTemplate模板使用补充

    1. 添加辅助方法 ``template.helper(name, callback)``辅助方法一般用来进行字符串替换,如 UBB 替换.脏话替换等. 例如扩展一个UBB替换方法: template ...

  9. wampserver环境搭建

    一.进入wampserver官网下载:http://www.wampserver.com/ 下载对应电脑相应版本的wamp程序(比如电脑是64位系统的就下载对应的64位的) 二.安装(直接点击exe文 ...

  10. 调试maven源代码

    下载源代码,导入idea 运行MavenCli ,设置vm参数 -Dclassworlds.conf=/Users/fsq/Downloads/apache-maven-3.6.2.0/bin/m2. ...