Java学习日记:UI篇(4)–冒泡排序动态展示
排序原理:持续比较相邻的元素,大的移到后面,因此大的会逐渐后移,形成有序序列。
冒泡排序,直接在终端输出结果:
package array;
import java.util.Arrays;
public class BubbleSort {
public void way() {
int array[] = {1,4,5,2,3,6};
for(int i=0;i<array.length;i++) {
for(int j=0;j<array.length-1;j++) {
if(array[j]>array[j+1]) {
int temp = array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
int K=i+1;
System.out.println(K+"次排序结果:"+Arrays.toString(array));
}
System.out.println(Arrays.toString(array));
}
public static void main(String[] args) {
BubbleSort bs=new BubbleSort();
bs.way();
}
}
~~~~~~~ 动态展示原理:利用上一节的画图板动态绘制展示排序过程。由于计算机运行速度较快,所以我们需要用到线程休眠(Thread.sleep(1000);),这里是让它休眠1s,这样我们就可以以适当的速度看到整个排序过程。为了让它更好的运行,这里最好使用:
try {
Thread.sleep(1000);//1000 = 1s
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
动态展示完整的代码:
package array;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Arrays;
import javax.swing.JFrame;
public class SortingDisplay {
public void showUI() {
int array[] = {12,8,10,9,7,6,5,3,2,1,};//这里是我们要排序的数组
JFrame jf =new JFrame();
for(int i=0;i<array.length;i++) {
jf.setTitle("画图板");
jf.setSize(500,450);
jf.setLocationRelativeTo(null);//默认居中
jf.setDefaultCloseOperation(3);//关闭
jf.setResizable(true);//固定大小
jf.setVisible(true);
Graphics g =jf.getGraphics();
for(int j=0;j<array.length-1;j++) {
if(array[j]>array[j+1]) {
int temp = array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
g.setColor(Color.ORANGE);
g.fillRect(100+30*j, 400-array[j]*30, 10, array[j]*30);//因为画图的远点在左上角,这里的操作让整个图形的基准在下方
}
// 线程休眠
try {
Thread.sleep(1000);//1000 = 1s
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int K=i+1;
System.out.println(K+"次排序结果:"+Arrays.toString(array));
}
System.out.println(Arrays.toString(array));//在终端中打印排序结果
}
System.out.println(Arrays.toString(array));
}
public static void main(String[] args) {
SortingDisplay sd=new SortingDisplay();
//sd.way();
sd.showUI();
}
}
结语:理论的学习是枯燥,加入一些有趣的操作会让学习变得愉悦。