自己玩玩写写,排序的过程多么有趣,特别是把看着电脑吧一堆乱七八糟的数据排成有序组合的时候,看起来贼舒服,特别是强迫症患者。好了,话不多说上代码,也算是自己记录一下吧,没有什么技术含量但个人感觉比较有趣。
排序以及显示代码:
1 package com.wyb.dyi.test; 2 3 import java.awt.Toolkit; 4 import java.util.Random; 5 6 import com.wyb.dyi.test.*; 7 8 public class showBubbleSort { 9 public static int W = (int) Toolkit.getDefaultToolkit().getScreenSize() 10 .getWidth();/* 当前屏幕宽度 */ 11 public static int H = (int) Toolkit.getDefaultToolkit().getScreenSize() 12 .getHeight();/* 当前屏幕高度 */ 13 14 static int[] array = getArray(W); 15 /*显示用的面板*/ 16 static ShowArrayInLine show = new ShowArrayInLine(array); 17 18 /* main */ 19 public static void main(String[] args) { 20 try { 21 Thread.sleep(2000); 22 } catch (Exception e) { 23 } 24 System.out.println("start!"); 25 bubble(array); 26 27 } 28 29 /* 冒泡排序 */ 30 static void bubble(int[] array) { 31 for (int i = 0; i < array.length; i++) { 32 for (int j = 0; j < array.length - 1 - i; j++) { 33 if (array[j] > array[j + 1]) { 34 int temp = array[j]; 35 array[j] = array[j + 1]; 36 array[j + 1] = temp; 37 } 38 /*可以在这里刷新显示,但是刷新速度过慢,能观察到排序细节*/ 39 show.updateShowArray(array); 40 } 41 /*在这里刷新显示比较快*/ 42 //show.updateShowArray(array); 43 } 44 } 45 46 47 /* 构造一个长度为length的高度为length/2的数组 */ 48 public static int[] getArray(int length) { 49 /* 生成空数组 */ 50 int[] re = new int[length]; 51 /* 给数组附上高为length/2的升序数值 */ 52 for (int i = 0; i < re.length; i++) 53 re[i] = i / 2; 54 /* 讲有序数组打乱 */ 55 for (int i = 0; i < 20 * re.length; i++) { 56 int index1 = new Random().nextInt(length); 57 int index2 = new Random().nextInt(length); 58 int temp = re[index1]; 59 re[index1] = re[index2]; 60 re[index2] = temp; 61 } 62 63 return re; 64 } 65 }
1 package com.wyb.dyi.test; 2 3 import java.awt.Color; 4 import java.awt.Graphics; 5 import java.awt.Toolkit; 6 import java.util.Random; 7 8 import javax.swing.JFrame; 9 import javax.swing.JPanel; 10 11 /* 显示主框架JFrame类 */ 12 class ShowArrayInLine extends JFrame { 13 private static final long serialVersionUID = 1L; 14 ShowJPanel show; 15 int[] oldArray; 16 /* 构造函数,初始化显示框架 */ 17 public ShowArrayInLine(int[] a) { 18 oldArray=a; 19 show = new ShowJPanel(a,a); 20 show.setBounds(0, 0, ShowTool.W, ShowTool.H); 21 this.setSize(ShowTool.W, ShowTool.H); 22 this.setTitle("归并排序"); 23 this.setLocation(0, 0); 24 this.add(show); 25 this.setVisible(true); 26 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 27 } 28 29 /** 30 * 更新画布 31 * 32 * @param a 33 */ 34 public void updateShowArray(int[] a) { 35 36 this.remove(show); 37 show = new ShowJPanel(a,oldArray); 38 this.add(show); 39 this.setVisible(true); 40 oldArray=a; 41 } 42 } 43 44 /* 画图面板 */ 45 class ShowJPanel extends JPanel { 46 private static final long serialVersionUID = 1L; 47 int[] array;/* 用于接收构造方法传过来的数组,用于绘图 */ 48 public int[] oldArray; 49 50 public ShowJPanel(int[] a,int[] b) { 51 array = a; 52 oldArray=b; 53 } 54 /* 绘图函数 */ 55 public void paintComponent(final Graphics g) { 56 Random r=new Random(); 57 58 59 /*画笔置白色*/ 60 g.setColor(Color.WHITE); 61 /* 擦除上一次绘制的团*/ 62 g.fillRect(0,0,Tool.W,Tool.H); 63 64 /* 开始绘制当前数组图像,以(0,ShowTool.H)为原点,向右为x轴表数组下标,向上为y轴表当前下标所对应数组存置大小*/ 65 for (int i = 0; i < array.length; i++) { 66 /* 画笔置黑色*/ 67 if(oldArray[i]==array[i]) 68 g.setColor(Color.BLACK); 69 else 70 g.setColor(Color.RED); 71 g.drawLine(i, ShowTool.H - 80, i, ShowTool.H - array[i] - 80); 72 } 73 74 75 76 } 77 } 78 79 /* 工具类,获取当前屏幕大小,用户初始化显示组件和new乱序数组 */ 80 class ShowTool { 81 public static int W = (int) Toolkit.getDefaultToolkit().getScreenSize() 82 .getWidth();/* 当前屏幕宽度 */ 83 public static int H = (int) Toolkit.getDefaultToolkit().getScreenSize() 84 .getHeight();/* 当前屏幕高度 */ 85 }
下面给出效果图以及连接: 冒泡排序过程呈现之java内置GUI表示视频
黑夜给了我黑色的眼睛,我却用它寻找光明