zoukankan      html  css  js  c++  java
  • 《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	", a[i]);
    		System.out.printf("
    ");
    /*快速排序*/
    		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	", a[i]);
    		System.out.printf("
    ");
    
    /*选择排序*/
    		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	", a[i]);
    		System.out.printf("
    ");
    	
    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
    ", key, add + 1);
    		else
    			System.out.printf("不存在%d
    ", 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不同的地方做些修改。
    • 排序算法比较基本,掌握其排序本质即可。
  • 相关阅读:
    SQL server中自定义排序
    安装nodejs版本模块报错notsup Unsupported platform for n
    vue项目中一些标签直接放在<template>下会报错Failed to compile with 1 errors
    vue中使用element-ui出现Couldn't find preset "es2015" relative to directory
    解决两个相邻的span,或者input和button中间有间隙,在css中还看不到
    VsCode中代码折叠快捷键
    npm 操作代码
    vue项目打包成html,在本地点击直接能打开
    地图只显示部分区域,其他地区不显示
    vs里颜色显示块怎样显示
  • 原文地址:https://www.cnblogs.com/zy1111/p/5375782.html
Copyright © 2011-2022 走看看