ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

数据结构课设--基于Java Swing实现九种排序的动态演示

2022-10-06 17:50:03  阅读:182  来源: 互联网

标签:


基本要求: 1、可以自拟题目,自拟的题目需要经过老师审核通过。 2、每个题目不设最高要求。 3、根据数据分析、数据结构设计、算法设计、功能设计、界面设计、系统实现、答辩情况以 及实验报告等综合进行成绩评定。 4、要求实现一个界面美观、功能完整、具有实用性的系统。 5、不限制编程语言,可以使用 JAVA。 6、完成本课程设计,需要查阅资料与文献,需要将参阅的文献列出。

A 类(系数 1.2) : 1、 线性结构的存储及操作的动画演示以及对应实际运行结果展示。包括:线性表、栈、队列(两种存储)。 要求:算法(程序代码)执行与存储结构的同步动态变化。 2、 二叉树与树的存储与操作的动画演示以及对应实际运行结果展示。包含各种基本操作。 3、 图的存储与操作的动画演示以及对应实际运行结果展示。包括:各种基本操作与算法。 4、查找的基本操作动画演示以及对应实际运行结果展示。包括:二叉排序树、平衡二叉树、B-树。 5、 排序的基本操作动画演示以及对应实际运行结果展示。包括:各种排序算法。

1)、界面 2)、实现效果: 3)、主界面代码

package sortingpackage;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;
import java.io.*;
import java.util.Arrays;


/** 
 * @ClassName: Main
 * @description: 主界面类
 * @author: Cyril_KI
 * @Date: 2019年12月20日 上午11:16:19
 */
class MainGUI{
          
   
	JFrame frame;
	JPanel panel1,panel2,panel3,panel4;
	JLabel speedLabel;
	JList<String> listCode;
	JMenuBar menuBar;
	JScrollPane pane;
	String str;
	DefaultListModel<String> model;
	JButton startButton,deceButton,acceButton,buttonStep,outLoopButton;
	JMenu insertMenu,selectMenu,exchangeMenu,mergeMenu,radixMenu;
	JMenuItem []items=new JMenuItem[9];
	String []data={
          
   "直接插入排序","折半插入排序","希尔排序","简单选择排序","堆排序","冒泡排序","快速排序","归并排序","基数排序"};
	public MainGUI() {
          
   
		frame=new JFrame();
		panel1=new JPanel();
		panel2=new JPanel();
		panel2.setLayout(new GridLayout(1, 3));
		str= "代码区                                                                                                                                             ";
		model=new DefaultListModel<String>();
		listCode=new JList<String>(model);
		model.add(0, str);
		speedLabel=new JLabel("当前速度为1000",JLabel.CENTER);
		panel3=new JPanel();
		panel3.setLayout(new BorderLayout());
		//panel1.setBorder(BorderFactory.createLoweredBevelBorder());
		Border border1=BorderFactory.createLoweredBevelBorder();
		panel1.setBorder(BorderFactory.createTitledBorder(border1,"动画演示区"));
		panel2.setBorder(BorderFactory.createTitledBorder(border1,"功能区"));
		listCode.setBackground(Color.darkGray);
		listCode.setForeground(Color.orange);
		pane=new JScrollPane(listCode);
		panel3.add(pane);
		Border border=BorderFactory.createEtchedBorder();
		panel3.setBorder(border);
		ImageIcon startIcon=new ImageIcon("start.jpg");
		ImageIcon stopIcon=new ImageIcon("stop.jpg");
		ImageIcon continueIcon=new ImageIcon("continue.jpg");
		startButton=new JButton("完整演示");
		startButton.setFont(new Font("宋体",Font.BOLD,25));
		startButton.setBackground(Color.LIGHT_GRAY);
		startButton.setPreferredSize(new Dimension(stopIcon.getIconWidth(), stopIcon.getIconHeight()));
		acceButton=new JButton("加速");
		acceButton.setBackground(Color.LIGHT_GRAY);
		acceButton.setFont(new Font("宋体",Font.BOLD,25));
		//acceButton.setForeground(Color.YELLOW);
		deceButton=new JButton("减速");
		deceButton.setBackground(Color.LIGHT_GRAY);
		deceButton.setFont(new Font("宋体",Font.BOLD,25));
		buttonStep=new JButton("单步执行");
		buttonStep.setBackground(Color.white);
		buttonStep.setForeground(Color.RED);
		buttonStep.setFont(new Font("宋体",Font.BOLD,25));
		outLoopButton=new JButton("跳出循环");
		startButton.setBorder(BorderFactory.createLoweredBevelBorder());
		acceButton.setBorder(BorderFactory.createLoweredBevelBorder());
		deceButton.setBorder(BorderFactory.createLoweredBevelBorder());
		buttonStep.setBorder(BorderFactory.createLoweredBevelBorder());
		speedLabel.setFont(new Font("宋体",Font.BOLD,25));
		speedLabel.setBorder(BorderFactory.createLoweredBevelBorder());
		panel4=new JPanel();
		panel4.setLayout(new GridLayout(1,2));
		panel4.add(buttonStep);//panel4.add(outLoopButton);
		panel4.add(speedLabel);
		panel3.add(BorderLayout.SOUTH,panel4);
		panel2.add(startButton);//panel2.add(pauseButton);panel2.add(continueButton);
		panel2.add(acceButton);panel2.add(deceButton);
		menuBar=new JMenuBar();
		insertMenu=new JMenu("插入");
		selectMenu=new JMenu("选择");
		exchangeMenu=new JMenu("交换");
		mergeMenu=new JMenu("归并");
		radixMenu=new JMenu("基数");
		for(int i=0;i<items.length;i++) {
          
   
			items[i]=new JMenuItem(data[i]);
		}
		insertMenu.add(items[0]);insertMenu.addSeparator();insertMenu.add(items[1]);insertMenu.addSeparator();
		insertMenu.add(items[2]);
		selectMenu.add(items[3]);selectMenu.addSeparator();selectMenu.add(items[4]);
		exchangeMenu.add(items[5]);exchangeMenu.addSeparator();exchangeMenu.add(items[6]);
		mergeMenu.add(items[7]);
		radixMenu.add(items[8]);
		menuBar.add(insertMenu);
		menuBar.add(selectMenu);
		menuBar.add(exchangeMenu);
		menuBar.add(mergeMenu);
		menuBar.add(radixMenu);
		frame.setJMenuBar(menuBar);
		frame.add(BorderLayout.CENTER,panel1);
		frame.add(BorderLayout.SOUTH,panel2);
		frame.add(BorderLayout.EAST,panel3);
		for(int i=0;i<9;i++) {
          
   
			items[i].addActionListener(new EventAction(this));
		}
		startButton.addActionListener(new EventAction(this));
		acceButton.addActionListener(new EventAction(this));
		deceButton.addActionListener(new EventAction(this));
		buttonStep.addActionListener(new EventAction(this));
		frame.setSize(1200, 800);
		//frame.setSize(800, 600);
		frame.setTitle("DynamicSorting");
		frame.setVisible(true);
		frame.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
	}
}
class EventAction implements ActionListener{
          
   
	MainGUI gui;
	int [][]codeNum=new int[9][];
	int pivot=0,low=0,high=0,temp=0;
	static String flag="";     //判断执行哪一个操作函数
	static int speed=1000,card=0,card1=0;
	static int index=1,index1=0,current=0;
	static int width=1,flagBinser=1;
	static int flagStep=0,flagBubble=0,flagSelect=0;
	static int flagDirec=1,flagDirect=1,gap=0;
	static boolean flagIndex=true;
	static boolean []cleanFlag= new boolean[9];
	Graphics graphics;
	//int []x= {41,100,63,12,4,45,8,55,11,68,93};
	int []x= {
          
   70,73,70,23,93,18,11,68};
	int []radix= {
          
   70,83,45,78,37,16,22,57,11,99};
	static int flagHeap=0;
	//int []x= {1,3,4,5,2};
	PaintRec paintRec;
	SortingFunction function;
	public EventAction(MainGUI gui) {
          
   
		this.gui=gui;
		paintRec=new PaintRec(gui);  //创建画图对象
		function=new SortingFunction(gui);
		codeNum[0]=new int[20];codeNum[1]=new int[20];codeNum[2]=new int[20];codeNum[3]=new int[20];codeNum[4]=new int[13];
		codeNum[5]=new int[20];codeNum[6]=new int[20];codeNum[7]=new int[20];codeNum[8]=new int[20];
		for(int i=0;i<codeNum.length;i++) {
          
   
			for(int j=0;j<codeNum[i].length;j++) {
          
   
				codeNum[i][j]=j+1;
			}
		}
		for(int i=0;i<cleanFlag.length;i++) {
          
   
			cleanFlag[i]=true;
		}
		graphics=gui.panel1.getGraphics();
	}
	public void recover() {
          
       //每次排序之后都要复原,方便进行下一次排序
		int []x= {
          
   70,73,70,23,93,18,11,68};
		int []radix= {
          
   70,83,45,78,37,16,22,57,11,99};
		this.x=Arrays.copyOfRange(x, 0, x.length);
		this.radix=Arrays.copyOfRange(radix, 0, radix.length);
	}
	public void actionPerformed(ActionEvent e) {
          
   
		if(e.getSource()==gui.acceButton) {
          
        //设置加速,且只能在一开始就设置加速
			if(speed>=100) {
          
   
				speed-=100;
				PaintRec.speed=EventAction.speed;  //设置速度
				gui.speedLabel.setText("当前速度为"+String.valueOf(2000-PaintRec.speed));
				//JOptionPane.showMessageDialog(gui.frame, "当前速度为"+String.valueOf(2000-PaintRec.speed), "提示", JOptionPane.INFORMATION_MESSAGE);
			}
			else {
          
   
				JOptionPane.showMessageDialog(gui.frame, "已达到最快速度!!", "提示", JOptionPane.INFORMATION_MESSAGE);
				
			}
		}
		if(e.getSource()==gui.deceButton) {
          
   
			if(2000-speed>=200) {
          
   
				speed+=100;
				PaintRec.speed=EventAction.speed;
				gui.speedLabel.setText("当前速度为"+String.valueOf(2000-PaintRec.speed));
			}
			else {
          
   
				JOptionPane.showMessageDialog(gui.frame, "已是最慢速度!!", "提示", JOptionPane.INFORMATION_MESSAGE);	
			}
		}
		if(e.getActionCommand()=="冒泡排序") {
          
   
			try {
          
   
				File file=new File("冒泡排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flag="冒泡排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"冒泡排序"));
		}
		if(e.getActionCommand()=="快速排序") {
          
   
			try {
          
   
				File file=new File("快速排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flag="快速排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"快速排序"));
		}
		if(e.getActionCommand()=="直接插入排序") {
          
   
			try {
          
   
				File file=new File("直接插入排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flag="直接插入排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"直接插入排序"));
		}
		if(e.getActionCommand()=="折半插入排序") {
          
   
			try {
          
   
				File file=new File("折半插入排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flag="折半插入排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"折半插入排序"));
		}
		if(e.getActionCommand()=="希尔排序") {
          
   
			try {
          
   
				File file=new File("希尔排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flag="希尔排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"希尔排序"));
		}
		if(e.getActionCommand()=="简单选择排序") {
          
   
			try {
          
   
				File file=new File("简单选择排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flag="简单选择排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"简单选择排序"));
		}
		if(e.getActionCommand()=="堆排序") {
          
   
			try {
          
   
				File file=new File("堆排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flagHeap=x.length-1;   //后续单步演示
			flag="堆排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"堆排序"));
		}
		if(e.getActionCommand()=="归并排序") {
          
   
			try {
          
   
				File file=new File("归并排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flag="归并排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"归并排序"));
		}
		if(e.getActionCommand()=="基数排序") {
          
   
			try {
          
   
				File file=new File("基数排序.txt");
				String str;
				BufferedReader reader=new BufferedReader(new FileReader(file));
				gui.model=new DefaultListModel<String>();
				gui.model.add(0, gui.str);
				int index=1;
				while((str=reader.readLine())!=null) {
          
   
					gui.model.add(index, str);
					index++;
				}
				reader.close();
				gui.listCode.setModel(gui.model);
				gui.listCode.setSelectedIndex(0);
			} catch (IOException e2) {
          
   
				e2.printStackTrace();
			}
			flag="基数排序";
			Border border=BorderFactory.createLoweredBevelBorder();
			gui.panel1.setBorder(BorderFactory.createTitledBorder(border,"基数排序"));
		}  
		//完整过程演示
		if(e.getSource()==gui.startButton&&flag.equals("冒泡排序")) {
          
   
			function.bubbleSort(x);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.equals("直接插入排序")) {
          
   
			function.insertSort(x);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.equals("简单选择排序")) {
          
   
			function.selectionSort(x);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.equals("希尔排序")) {
          
   
			function.shellSort(x);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.equals("快速排序")) {
          
   
			function.QuickSort(x, 0, x.length-1,true,true);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.equals("折半插入排序")) {
          
   
			function.binsertSort(x);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.equals("堆排序")) {
          
   
			function.heapSort(x);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.equals("归并排序")) {
          
   
			function.mergeSort(x);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.equals("基数排序")) {
          
   
			function.radixSort(radix);
			recover();
		}
		if(e.getSource()==gui.startButton&&flag.length()<2||e.getSource()==gui.buttonStep&&flag.length()<2) {
          
   
			JOptionPane.showMessageDialog(gui.frame, "请先在菜单中选择一种排序方式!", "提示", JOptionPane.INFORMATION_MESSAGE);	
		}
		if(e.getSource()==gui.buttonStep&&flag.length()>=2&&flag.substring(flag.length()-2).equals("排序")) {
          
   
			gui.listCode.setSelectedIndex(index);
			if(flag.equals("堆排序")) {
          
   
				if(cleanFlag[0]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[0]=false;
				}
				if(index==5) {
          
   
					function.heapSortInit(x);
				}
				if(flagHeap>0) {
          
   
					if(index==11) {
          
   
						function.heapSortStepsOut(x,flagHeap);
						flagHeap--;
						index=6;
						gui.listCode.setSelectedIndex(index);
						flagIndex=false;
					}
				}
				if(index==6&&flagHeap==0) {
          
   
					index=12;
					gui.listCode.setSelectedIndex(index);
					flagIndex=false;
				}
				if(index==13) {
          
   
					Graphics graphics=gui.panel1.getGraphics();
					graphics.clearRect(150, 450, 450 , 80);
					graphics.setFont(new Font("宋体",Font.BOLD,25));
					graphics.setColor(Color.black);
					graphics.drawString("调整完毕,最终序列即树结点逆序序列:", 120, 500);
					function.heapSortLast(x);
				}
				if(index==13) {
          
   
					index=0;
					recover();
				}
			}
			if(flag.equals("归并排序")) {
          
   
				if(cleanFlag[1]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[1]=false;
				}
				if(flagDirec==x.length-1) {
          
   
					index=12;
					gui.listCode.setSelectedIndex(index);
					flagIndex=false;
				}
				if(index==7) {
          
   
					if(width<x.length) {
          
   
						function.mergeSortSingleStep(width, x);
						width*=2;
						index=5;
						flagIndex=false;
						if(width<x.length) {
          
   
							gui.listCode.setSelectedIndex(index);	
						}
						else {
          
   
							index=8;
							gui.listCode.setSelectedIndex(index);
							flagIndex=false;
						}
					}
					else {
          
   
						index=10;
						flagIndex=false;
						gui.listCode.setSelectedIndex(index);
					}
				}
				if(index==9) {
          
   
					index=0;
					recover();
				}
			}
			if(flag.equals("基数排序")) {
          
   
				if(cleanFlag[2]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[2]=false;
				}
				if(index==16) {
          
   
					function.radixSortInit(radix);   //初始化
				}
				if(index==22&&flagStep==0) {
          
   
					function.radixSortCore1(radix, 10, 1);   //第一次分配
					flagStep++;
				}
				if(index==27&&flagStep==1) {
          
      //第一次收集
					function.radixSortCore2(radix, function.bucketList1);
					flagStep++;
				}
				if(index==29&&flagStep==2) {
          
      //回到循环初始位置
					index=18;
					flagIndex=false;
					gui.listCode.setSelectedIndex(index);
				}
				if(index==22&&flagStep==2) {
          
   
					function.radixSortCore1(radix, 100, 10);   //第二次分配
					flagStep++;
				}
				if(index==27&&flagStep==3) {
          
       //第二次收集
					function.radixSortCore2(radix, function.bucketList1);
				}
				if(index==31) {
          
   
					Graphics graphics=gui.panel1.getGraphics();
				    graphics.setColor(Color.black);
				    graphics.setFont(new Font("宋体",Font.BOLD,25));
				    graphics.drawString("RaidxSorting Completed!!", 190, 500);
				}
				if(index==32) {
          
   
					index=0;
					recover();
				}
			}
			if(flag.equals("直接插入排序")) {
          
       //OK
				if(cleanFlag[3]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[3]=false;
				}
				if(card==0&&flagDirec<x.length) {
          
   
					index1=flagDirec;
					current=x[flagDirec];
					card++;
				}
				if(index==3) {
          
   
					function.paintRec.directInsertInit(x);
				}
				if(index==3&&flagDirec==x.length) {
          
   
					index=12;
					gui.listCode.setSelectedIndex(index);
					flagIndex=false;
				}
				if(flagDirec<x.length) {
          
   
					if(index==4) {
          
   
						function.paintRec.directInsertDown(x, flagDirec,PaintRec.speed);   //第待排序长方形块下落
					}
					if(index==8) {
          
       //寻找插入位置
						while(index1-1 >= 0 && current < x[index1-1]){
          
   
							function.paintRec.directInsertLeft(x, index1,current,PaintRec.speed);
							x[index1] = x[index1-1];    //小矩形右移
							index1--;    //这里的数怎么能够保存下来呢
						}
					}
					if(index==10) {
          
   
						function.paintRec.directInsertUp(x, index1,current,PaintRec.speed);   //找到插入位置
						x[index1]=current;
						flagDirec++;   //i++
						card=0;   //进行下一轮循环
						index=3;
						gui.listCode.setSelectedIndex(index);
						flagIndex=false;
					}
				}
				if(index==13) {
          
   
					Graphics graphics=gui.panel1.getGraphics();
				    graphics.setColor(Color.black);
				    graphics.setFont(new Font("宋体",Font.BOLD,25));
				    graphics.drawString("Completed!!", 270, 500);
				}
				if(index==14) {
          
   
					index=0;
					recover();
				}
			}
			if(flag.equals("冒泡排序")) {
          
   
				if(cleanFlag[4]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[4]=false;
				}
				if(index==3) {
          
   
					function.initBubble(x);  //初始化
					if(flagBubble==x.length) {
          
      //跳出循环
						index=12;
						gui.listCode.setSelectedIndex(index);
						flagIndex=false;
					}
				}
				if(flagBubble<x.length) {
          
   
					if(index==7) {
          
   
						function.bubbleSortExchange(flagBubble, x);
						flagBubble++;
						index=3;
						gui.listCode.setSelectedIndex(index);
						flagIndex=false;
					}
				}
				if(index==14) {
          
   
					index=0;
					recover();
				}
			}
			if(flag.equals("快速排序")) {
          
   
				if(cleanFlag[5]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[5]=false;
				}
				if(index==2) {
          
   
					function.quickInit(x);
				}
				if(index==4) {
          
   
					pivot=function.partition(x, 0, x.length-1);//得到第一轮排序的基准所落位置
				}
				if(index==6) {
          
   
					function.paintRec.quickSortClean(pivot,PaintRec.speed);  //清除重合的两个箭头
					function.paintRec.quickSortInit(x, 0, pivot-1);
					function.quickLeft(x, 0, pivot-1);
				}
				if(index==8) {
          
   
					function.paintRec.quickSortClean(0,PaintRec.speed);  //清除重合的两个箭头
					function.paintRec.quickSortInit(x, pivot+1, x.length-1);
					function.quickRight(x, pivot+1, x.length-1);
				}
				if(index==9) {
          
   
					index=0;
					recover();
				}
			}
			if(flag.equals("简单选择排序")) {
          
   
				if(cleanFlag[6]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[6]=false;
				}
				if(index==2) {
          
   
					function.paintRec.bubbleSortInit(x);   //初始化
				}
				if(index==3&&flagSelect==x.length) {
          
   
					index=17;
					gui.listCode.setSelectedIndex(index);
					flagIndex=false;
				}
				if(index==12) {
          
   
					if(flagSelect<x.length) {
          
   
						int minIndex = flagSelect;
						for(int j = flagSelect;j<x.length;j++){
          
   //遍历未剩余未排序元素中继续寻找最小元素
							if(x[j] < x[minIndex]){
          
   
								minIndex = j;
							}
						}
						if(minIndex != flagSelect){
          
   
							function.paintRec.bubbleSortExchange(flagSelect, minIndex, x.length, x,PaintRec.speed);
							int temp = x[minIndex];
							x[minIndex] = x[flagSelect];
							x[flagSelect] = temp;
						}
						flagSelect++;
						index=3;
						gui.listCode.setSelectedIndex(index);
						flagIndex=false;
					}
				}
				if(index==18) {
          
   
					index=0;
					recover();
				}
			}
			if(flag.equals("希尔排序")) {
          
   
				if(cleanFlag[7]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[7]=false;
				}
				if(index==2) {
          
       //初始化
					function.paintRec.shellSortInit(x);
				}
				if(index==4) {
          
   
					gap=x.length/2;
					function.paintRec.drawShellGap(gap,PaintRec.speed);
				}
				if(index==5&&gap==0) {
          
   
					index=18;
					gui.listCode.setSelectedIndex(index);
					flagIndex=false;
				}
				if(gap>0) {
          
   
					if(index==12) {
          
   
						for(int i = gap;i < x.length;i++) {
          
   
			           		int temp = x[i];    //待插入结点上移
			           		function.paintRec.shellUp(x, i,PaintRec.speed);
			                int index = i - gap;
			                while(index >= 0 && x[index] > temp) {
          
   
			                	function.paintRec.shellLeft(x, index+gap, temp, gap,PaintRec.speed);
			                   	x[index + gap] = x[index];      //后移一个元素
			                    index -= gap;
			                }
			                function.paintRec.shellDown(index+gap, x, temp,PaintRec.speed);
			                x[index + gap] = temp;     //待插入元素下落
			           	}
					}
					if(index==15) {
          
   
						gap/=2;
						function.paintRec.drawShellGap(gap,PaintRec.speed);
						index=5;
						gui.listCode.setSelectedIndex(index);
						flagIndex=false;
					}
				}
				if(gap<0) {
          
   
					index=17;
					gui.listCode.setSelectedIndex(index);
					flagIndex=false;
				}
				if(index==19) {
          
   
					index=0;
					recover();
				}
			}
			if(flag.equals("折半插入排序")) {
          
   
				if(cleanFlag[8]) {
          
   
					graphics=gui.panel1.getGraphics();
					graphics.clearRect(gui.panel1.getX(), gui.panel1.getY(), gui.panel1.getWidth(), gui.panel1.getHeight());
					cleanFlag[8]=false;
				}
				if(card1==0&&flagBinser<x.length) {
          
   
					low=0;
					high=flagBinser-1;
					temp=x[flagBinser];
					card1++;
				}
				if(index==1) {
          
   
					Graphics graphics=gui.panel1.getGraphics();
				    graphics.setColor(Color.black);
				    graphics.setFont(new Font("宋体",Font.BOLD,25));
				    graphics.drawString("插入位置为high+1!!", 200, 500);
				    paintRec.binsertSortInit(x, 0, 0);     //初始状态下画图
				}
				if(index==2&&flagBinser==x.length) {
          
      //跳出循环
					index=20;
					gui.listCode.setSelectedIndex(index);
					flagIndex=false;
				}
				if(flagBinser<x.length) {
          
   
					if(index==5) {
          
   
						paintRec.drawArrowAgain(low, high, x,PaintRec.speed);
						paintRec.binsertSortUp(flagBinser, x,PaintRec.speed);
					}
					if(index==8) {
          
       //找到插入位置
						while(low<=high) {
          
          //
							int mid = (high+low)/2;
							if(x[mid]<temp) {
          
   
							   //不移动直接全部删掉重新设置箭头避免麻烦
								paintRec.drawArrowAgain(mid+1, high, x,PaintRec.speed);
								low = mid+1;
							}
							else {
          
   
								paintRec.drawArrowAgain(low, mid-1, x,PaintRec.speed);
								high = mid-1;
							}
						}
						index=14;
						gui.listCode.setSelectedIndex(index);
						flagIndex=false;
					}
					if(index==17) {
          
   
						for (int j = flagBinser-1; j > high; --j) {
          
   
							paintRec.binsertSortReplacement(x, j,PaintRec.speed);
							x[j+1] = x[j];           //array[j]上升然后右移到array[j+1]上方,此时array[j+1]同步消失,然后上方圆形数据下落
						}
					}
					if(index==19) {
          
   
						paintRec.binsertSortLastSteps(high, temp,flagBinser,PaintRec.speed);
						x[high+1] = temp;
						flagBinser++;
						card1=0;   //新的一轮排序过程
						index=2;
						gui.listCode.setSelectedIndex(index);
						flagIndex=false;
					}
				}
				if(index==21) {
          
   
					paintRec.binsertClean(x);
					index=0;
					recover();
				}
			}
			if(flagIndex) {
          
       
				index++;
			}
			flagIndex=true;
		}
	}
	
}
public class Main {
          
   

	public static void main(String[] args) {
          
   
		new MainGUI();
	}

}

项目资源:

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有