1、java课设合并排序动态演示目录1需求分析1.1设计任务.21.1项目背景.2二概要设计2.1类设计.32.2系统流程.32.3系统模块.3三详细设计3.1各模块的实现方法.53.2程序流程.133.3系统界面.164调试分析五用户使用及说明六测试结果2需求分析1.1设计任务本系统为合并排序的演示展示程序,分为界面设计和算法设计两大部分,通过Java 的GUI图形用户界面演示合并排序的算法原理,实现排序算法的动态演示。要求完成: (1)理解并实现合并排序算法 (2)使用界面完成合并排序算法的演示 (3) 动态跟踪排序 1.2项目背景 为加深对理论教学内容的理解,掌握图形界面设计,熟悉 java
2、.awt包的组件,掌握图形界面设计方法,理解事件处理模型,检 测对这门课的掌握情况。有助于及时查漏补缺,使学生系统地掌握程 序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生 综合运用所学知识,并在实践应用方面打下 一定基础,开展合并排序 的算法演示课程设计。合并排序算法是归并排序的一种,主要是利用 递归算法进行排序算法的动态演示。二概要设计2.1类设计2.2.系统流程2.2.1用户通过主界面在排序区输入要合并排序的字符串 2.2.2开始排序,演示区实时显示当前排序的子字符串2.2.3动态演示排序过程2.2.4显示排序的实时结果2.3.系统模块2.3.1主类(CMain)程序的入口,创建
3、窗体函数对象2.3.2主界面窗体类(CWin)构造用户GUI图形界面,合并排序算法的前台演示排序过程2.3.3合并排序算法实现类(CMergeSort)将文本框控件传来的数据进行合并排序2.3.4跟踪界面窗体类(CStateWin)动态演示程序运行到某一处代码段2.3.5等待同步类(Wait)实现前台后台数据同步。三详细设计3.1各模块的实现方法:3.1.1主类(CMain)实现方法:主方法public static void static void main(String args),创建窗体函数对象;3.1.2主界面窗体类(CWin)实现方法:Public class CWin exten
4、ds JFrame implements ActionListener,MouseListener,RunnableCWin()1.完成窗体控件的声明和初始化,2.设置控件的摆放位置3.增加事件监听private void Inittialization()初始化窗体控件,为排序类(CMergeSort)的静态标记为赋初值Private String GetRanDomSequence()产生随机序列数据,传入输入文本框private void StartMergeSort()排序及演示 int mid = 0,i; String strTemp = txtInput1.getText();
5、for(i = 0; i strTemp.length(); i+) if(strTemp.charAt(i)=, | strTemp.charAt(i)=,) mid+; strTemp = strTemp+ , + txtInput2.getText(); if(strTemp.length() MaxElement) JOptionPane.showMessageDialog(this, ?,? ?+ String.valueOf(MaxElement) +?,?, JOptionPane.PLAIN_MESSAGE); return; else if(data.length 2) JO
6、ptionPane.showMessageDialog(this, ?,?2 ?,?, JOptionPane.PLAIN_MESSAGE); return; btnRun.setText(?); CMergeSort.isSuspend = false; CMergeSort.isChange = false; CMergeSort.isRefresh = false; CMergeSort.isOver = true; CMergeSort.intChangeSrc = -1; CMergeSort.intChangeDes = -1; CMergeSort.intCount = 0; C
7、MergeSort.strHandle = ?; intUsedElement = data.length; for(i = 0;i MaxElement;i+) btnDemonstratei.setText(-); btnDemonstratei.setVisible(false); win_w = this.getWidth(); win_h = this.getHeight(); for(i = 0;i intUsedElement;i+) btnDemonstratei.setText(datai); btnDemonstratei.setBounds(win_w/(2+3*intU
8、sedElement) +i*win_w/(intUsedElement + 1),intDefY,win_w/(intUsedElement + 1),win_h/(intUsedElement + 1); btnDemonstratei.setVisible(true); /? txtDemonstrate.setText(?:+Arrays.toString(data) +n?:? +n?:+String.valueOf(CMergeSort.intCount); MergeTwoList(mid); CMergeSort cms = new CMergeSort(data); Thre
9、ad thd = new Thread(cms); thd.start(); /? WaitTime(); /? ? ? while(!CMergeSort.isOver) if(CMergeSort.isChange) MoveElement(); txtDemonstrate.setText(?: +Arrays.toString(CMergeSort.data_image) +n?:+CMergeSort.strHandle +n?: +String.valueOf(CMergeSort.intCount); /?txtDemonstrate?,? ? CMergeSort.isChan
10、ge = false; else if(CMergeSort.isRefresh) Refresh(); txtDemonstrate.setText(?: +n?:+CMergeSort.strHandle +n?: +String.valueOf(CMergeSort.intCount); WaitTime(); btnRun.setText(?); private void Refresh()与后台同步数据private void MoveElement()动态演示排序数据 private void MoveElement() if(CMergeSort.intStart != -1 &
11、 CMergeSort.intEnd != -1) /? MoveDown(CMergeSort.intStart,CMergeSort.intEnd); CMergeSort.intStart = -1; CMergeSort.intEnd = -1; else if(CMergeSort.intStart = -2) /? if(csw != null) csw.setState(CMergeSort.intStatement); CMergeSort.intStart = -1; else /? MoveUp(CMergeSort.intChangeSrc,CMergeSort.intC
12、hangeDes); private void MoveDown(int indexS,int indexE)将一组待比较的节 点向下移动private void MoveUp(int index,int des)?private void WaitTime()?3.1.3合并排序算法实现类(CMergeSort)实现方法:public class CMergeSort implements Runnable public CMergeSort(String data)?,承接输入文本框传入的函数public void run()?private void MergeSort(String d
13、ata)?private void MSort(String data,String temp,int start, int end)?:?data?temp?private void Merge(String data,String temp,int start, int mid, int end)?tempstart,mid,tempmid+1,end? dataprivate int strcmp(String str1,String str2)? private void WaitForFlag()?private void WaitTime() Wait.sleep(CMergeSo
14、rt.intInterval); private void WaitLongTime()/?,? ? Wait.sleep(CMergeSort.intInterval * 20); 3.1.4跟踪界面窗体类(CStateWin)实现方法:public class CStateWin extends JFrame JList lstStatement; /? String statement= int j,k;, for(j = mid + 1, k = start; start = mid & j = end; +k), , if(strcmp(tempstart, tempj) = 0),
15、 , datak = tempstart+;, , else, , datak = tempj+;, , , if(start = mid), , for(int i0 = start ; i0 = mid ; i0+), , datak+ = tempstart+;, , , if(j = end), , for(int j0 = j; j0 查看函数即可观看程序代码段的运行的具体执行语句处,动态展示算法的执行情况:六测试结果七代码附:程序部分代码/*类功能:提供合并排序*/public class CMergeSort implements Runnable /线程是否结束 static
16、boolean isOver = true; /是否交换 static boolean isChange = false; /是否交换完成 static boolean isRefresh = false; /交换起始位置 static int intStart = -1; /交换终点位置 static int intEnd = -1; /交换源 static int intChangeSrc = -1; /交换位置 static int intChangeDes = -1; /当前操作 static String strHandle = ; /比较次数 static int intCount
17、 = 0; /是否暂停 static boolean isSuspend = false; /检测休眠时间 static int intInterval = 30; /待排序序列镜像 static String data_image; /* *函数功能:构造函数 *输入:待排序序列 *输出:无 */ public CMergeSort(String data) data_image = new Stringdata.length; System.arraycopy(data, 0, data_image, 0, data.length); /* *线程 */ public void run()
18、 isOver = false; isChange = false; MergeSort(data_image); isOver = true; /* *函数功能:启动合并排序 *注意:根据字符排序,所以输入可以是数字也可以是字母,当数字和字母比较时比较ASCII *比如10和a 比较10a,10和a0比较10 1) int mid = (start + end) / 2; Function_test(dest, src, start, mid); Function_test(dest, src, mid, end); intStart = start; intEnd = end; for (int i = start, j = mid, k = start; k = end | i mid & strcmp(srci , srcj) 0) destk = srci+; else destk = srcj+; isChange = true; if(isOver) return; WaitForFlag(); /* *函数功能:合并排序 *输入:字符串1,字符串2,起始位置,终
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1