排序算法部分可视化

排序算法部分可视化

程序介绍

最近复习排序算法闲着无聊,做了一个可视化小程序,这个程序支持部分排序算法,当然有兴趣可以自己扩展

我将冒泡排序,选择排序,插入排序,希尔排序,快速排序做了可视化,展示一下最终效果

在这里插入图片描述

感兴趣可以看看我原来写的排序算法的链接(归并排序,桶排序)

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
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值