策略模式的实现,排序算法分析

1、课设基本内容

1.1 课设题目:

策略模式的实现,排序算法分析

1.2 设计目的:

1. 初步了解设计模式的意义。

2. 能够根据策略模式模型,设计类。

1.3 设计内容:

1.利用JavaFX设计简单的用户交互界面,允许从文件读入不少于100个数据,并对这些数据排序(可以是数字、字符串等内容)。

2.提供至少三种排序算法(直接插入排序、冒泡排序、归并排序)

3.可以选择数据文件,文件中至少应包含100条以上的数据。

4.下拉框可以选择排序方法,运行后获得排序结果,并按照排序写入结果文件(三个算法分别建立排序结果文件,以便答辩时检查排序准确性)。

5.页面提供“排序效率分析”按钮,点击后,同时采用三种排序方法排序,并按照执行效率从高到低,展示三种排序所用的时间。

2、 设计与实现

2.1 设计思路:

策略模式是指用户从一个算法族中任选一个算法来解决问题,而在本需求中,用户需选择一个排序方式对所选数据文件进行排序并将结果写入对应的文件,在开始之前,我们需读取用户所选取文件的数据,因此我创建了ReadData类,实现将用户选取文件数据读取,并将读入数据值传给数组,接下来我创建Sort类(接口)来实现定义抽象排序角色,在Sort类有对数字数据和字母数据的排序和写入文件的方法声明,

void sort1(String[] arr);

void sort2(int[] arr);

 void write1(String[] arr) throws IOException;

void write2(int[] arr) throws IOException;

其次我们需定义具体的排序角色,因此我创建了(BubbleSort类, InsertSort类,MergeSort类这三个具体排序的类,它们都继承了Sort接口,在这三个类中完成接口声明方法代码的书写,同时为了实现排序效率分析的功能,在这三个类中增加计算其排序时间的方法timeString和timeNum,最后我们需定义环境角色,负责和具体排序类交互,给用户调用,因此我创建了 ArrayHandler类,在该类的内部有Sort类的引用(private final Sort sortObject),实现当传入一个具体排序类的引用时,通过 ArrayHandler类的引用实现排序并且将排序结果写入文件。

    public ArrayHandler(Sort sortObject) {

        this.sortObject = sortObject;

}

以上就已经基本实现要求功能,接下来就实现用户交互界面,首先创建SortApplication类)来实现主界面的加载,本次设计中的下拉选框,标签,按钮是通过Scene Builder来进行排版,因此我创建了viewFXML.fxml文件来完成界面排版,颜色属性的设置和字体大小调整,而Controller类主要用于处理事件和对部件的属性进行设置。

2.2 类的划分原则

2.3 软件设计

作用

ReadData类

读取用户所选取文件中的数据,并将读入数据的值放到数组当中

Sort类(接口)

一系列方法的声明

BubbleSort类

实现Sort类中声明的方法,对数字文件,字母文件进行冒泡排序,并将排序结果写入指定.txt文件,对排序耗费时间进行计算

InsertSort类

实现Sort类中声明的方法,对数字文件,字母文件进行直接插入排序,并将排序结果写入指定.txt文件,对排序耗费时间进行计算

MergeSort类

实现Sort类中声明的方法,对数字文件,字母文件进行归并排序,并将排序结果写入指定.txt文件,对排序耗费时间进行计算

ArrayHandler类

负责和具体排序类交互,给用户调用

SortApplication类

实现主界面的加载

           Controller类

对下拉选框初值进行设定,对标签文本内容的设置,对用户对排序效率分析按钮点击进行处理,对用户下拉选框选取进行一系列响应等等。

3、测试与结果

需要验证的问题

实验方案及运行结果

对应的关键代码

可以选择数据文件,并读取文件数据

实验方案:通过 FileChooser让用户选择数据文件,并获取数据文件绝对路径,将绝对路径传给ReadData类的方法,实现将数据传入数组

运行结果:见下方图 2 选择数据文件

FileChooser  fileChooser=new FileChooser();

File  selectedFile=fileChooser.showOpenDialog(stage);

String path1=selectedFile.getAbsolutePath();

array = a.readDataNum(path1); //a为ReadData类的一个引用

将排序结果写入文件

实验方案:使用BufferedWriter:字符缓冲输出流

运行结果:见下方图 4 将排序结果写入文件

File Filename = new File("   ");

BufferedWriter out = new BufferedWriter(new FileWriter(Filename));

out.write( );

out.flush();

out.close();

排序效率的分析

实验方案:通过排序时间进行比较

运行结果:见下方图 3 排序效率分析

long begin=System.nanoTime();             

sort(arr);

long end=System.nanoTime();

return   end-begin;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_60434562

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值