⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gracie.java

📁 用c编写的数据内部排序方法,可在窗口中选择多种排序方法,如快排,冒泡,折半插入等,还可以选择排序数据的个数,初态,控制等.
💻 JAVA
字号:
package main;

import java.awt.*;
import javax.swing.*;
import java.util.*;

public abstract class Gracie extends JPanel implements Runnable{
	public int[] array;
	public int width=150,height=240,step,increase,sleep=30;
	public myPanel parent;
	public String time=new String();
	public boolean start=false;
	public long startL,endL;
	public Color[] color=new Color[]{ new Color(0,0,255),
		new Color(255,0,0),new Color(0,255,0),new Color(206,206,206),
			new Color(46,46,46)};	
	
	private Result result=new Result();
	
	public abstract String getName();
	
	public abstract String getCommand();
	
	public abstract void sort();
	
	public void setState(boolean b){
		start=b;
	}	
	public boolean getState(){
		return start;
	}	
	
	public void init(int[] a){
		array=a;
		repaint();
	}
	
	public void exchange(int i,int j){
		int temp;
		temp = array[i];
		array[i] = array[j];
		array[j] = temp;
		Graphics g=getGraphics();
		g.setColor(color[4]);
		g.drawLine(0,step+i*2,array[i]*increase,step+i*2);
		g.setColor(color[3]);
		g.drawLine(array[i]*increase,step+i*2,width,step+i*2);
		g.setColor(color[4]);
		g.drawLine(0,step+j*2,array[j]*increase,step+j*2);
		g.setColor(color[3]);
		g.drawLine(array[j]*increase,step+j*2,width,step+j*2);
		g.dispose();
		try{
			Thread.sleep(sleep);
		}
		catch(InterruptedException e){e.printStackTrace();}
	}
	
	public void draw(int h1,int h2,int h3){
		Graphics g=getGraphics();
		if(h1>0){
			g.setColor(color[0]);
			g.drawLine(0,step+h1*2,width,step+h1*2);
		}
		if(h2>0){
			g.setColor(color[1]);
			g.drawLine(0,step+h2*2,width,step+h2*2);
		}
		if(h3>0){
			g.setColor(color[2]);
			g.drawLine(0,step+h2*2,width,step+h2*2);
		}
		g.dispose();
	}
	
	public void update(Graphics g){
		paint(g);
	}
	
	public void paint(Graphics g){
		step=(int)((height-array.length*2)/2);
		increase=(int)(getSize().width/array.length);
		
		Image offI=createImage(width,height);
		Graphics offS=offI.getGraphics();
		parent.validate();
		offS.setColor(Color.white);
		offS.fillRect(0,0,width,height);
		for(int k=0;k<array.length;k++){
			offS.setColor(color[4]);
			offS.drawLine(0,step+k*2,array[k]*increase,step+k*2);
			offS.setColor(color[3]);
			offS.drawLine(array[k]*increase,step+k*2,width,step+k*2);
		}
		g.drawImage(offI,0,0,null);
		/*
		for(int k=0;k<array.length;k++){
		g.setColor(color[4]);
		g.drawLine(0,step+k*2,array[k]*increase,step+k*2);
		g.setColor(color[3]);
		g.drawLine(array[k]*increase,step+k*2,width,step+k*2);
		}*/
	}
	
	public void setParent(myPanel p){
		parent=p;
	}
	
	public Dimension getPreferredSize(){
		return new Dimension(width,height);
	}
	
	public void timeBegin(){
		parent.result.setText("所用时间");
		startL=System.currentTimeMillis();
	}
	
	public void timeEnd(){
		endL=System.currentTimeMillis();
		time=String.valueOf(endL-startL);
		parent.result.setText(time+"ms");
		result.notifyObservers();
	}
	
	public void run(){
		while(true){
			if(start){
				timeBegin();
				sort();
				timeEnd();
				start=false;
			}
			try{Thread.sleep(1000);}
			catch(InterruptedException e){e.printStackTrace();}
		}
	}
	
	public void addObserver(Observer o){
		result.addObserver(o);
	}
	
	public class Result extends Observable{
		
		public void notifyObservers(){
			setChanged();
			super.notifyObservers();	
		}
		
		public String[] getResult(){
			return new String[]{getName(),time};
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -