排序算法部分可视化
程序介绍
最近复习排序算法闲着无聊,做了一个可视化小程序,这个程序支持部分排序算法,当然有兴趣可以自己扩展
我将冒泡排序,选择排序,插入排序,希尔排序,快速排序做了可视化,展示一下最终效果
感兴趣可以看看我原来写的排序算法的链接(归并排序,桶排序)
https://blog.csdn.net/peterbearXY/article/details/114648428
程序描述
点击相应的按钮可以让下面的图像进行更新,点击重置可以使所有数回到原有位置
我们可以通过看相应的图像变化了解排序算法的过程,这里强烈推荐看选择排序,这个最明显
我这里放一串示例代码,全部可以到下面的链接中下载
https://download.csdn.net/download/peterbearXY/18116736
示例代码
选择排序:排序部分(利用线程)+演示部分
//排序部分
package SelectSorting;
import java.awt.Panel;
public class SelectAlgorithm extends Thread{
private int[] arr;
private Panel p;
public SelectAlgorithm(int[] arr, Panel p) {
this.arr = arr;
this.p = p;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<arr.length-1;i++) {
int smallest =i;
for(int j=i;j<arr.length;j++) {
if(arr[j] < arr[smallest])
smallest = j;
}
if(i != smallest) {
int temp = arr[i];
arr[i] = arr[smallest];
arr[smallest] = temp;
p.repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
//展示部分
package SelectSorting;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SelectDrawing extends JFrame{
private MyPanel panel;
public static void main(String[] args) {
// TODO Auto-generated method stub
new SelectDrawing();
}
public SelectDrawing() {
// TODO Auto-generated constructor stub
int[] arr = {6,3,7,1};
panel = new MyPanel();
panel.InitData(arr);
this.add(panel);
this.setSize(800, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class MyPanel extends Panel{
private int[] arr;
private int[] originArr;
private JButton start;
private JButton reset;
public int[] getArr() {
return arr;
}
public void InitData(int[] arr) {
this.arr = arr;
this.originArr = Arrays.copyOf(arr, arr.length);
start = new JButton();
start.setText("开始");
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
StartToSort();
}
});
start.setVisible(true);
reset = new JButton();
reset.setText("重置");
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
ReSetArr();
}
});
this.add(start);
this.add(reset);
}
//重置
private void ReSetArr() {
// TODO Auto-generated method stub
arr = Arrays.copyOf(originArr, originArr.length);
this.repaint();
}
//开始排序
private void StartToSort() {
// TODO Auto-generated method stub
SelectAlgorithm sort = new SelectAlgorithm(arr, this);
sort.start();
}
//绘制图像
private void InitRects(Graphics g) {
int x=100;
int y=500;
int preY =0;
for(int i:arr) {
y -= i*50 - preY;
g.drawRect(x, y, 20, i*50);
x+=20;
preY = i*50;
}
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
InitRects(g);
}
}
final