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

📄 gui.java

📁 用awt做界面的排序算法比较程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                public void mouseEntered(MouseEvent e){
                	//鼠标到按钮上时显示提示信息
                	statusbar.setText("选中所有排序算法");
                  }
            public void mousePressed(MouseEvent e){
            	//鼠标点击后选中所有的排序算法
            	for(int i=0;i<7;i++)
            		cb[i].setState(true);
                       }
               }//end of class allbhandle
               
     public class nonebhandle extends starthandle{//全部不选按钮处理方法
             public void mouseEntered(MouseEvent e){
                	//鼠标到按钮上时显示提示信息
                	statusbar.setText("不选任何排序算法");
                  }
            public void mousePressed(MouseEvent e){
            	//鼠标点击后取消所有的排序算法的选取
            	for(int i=0;i<7;i++)
            		cb[i].setState(false);
                       }
               }//end of class nonebhandle

       }//end of class gui
    



class SqList {
    public int[] r;
    public int length;
    public SqList(int leng,String seq) {
	length=leng;
	r=new int[leng];
	if(seq.compareTo("正序")==0)for(int i=0;i<leng;i++)r[i]=i;
	if(seq.compareTo("逆序")==0)for(int i=0;i<leng;i++)r[i]=leng-i-1;
	if(seq.compareTo("随机")==0)for(int i=0;i<leng;i++)r[i]=(int)(Math.random()*100000); 
			 }
  }

class SortClass {
	SqList Sq;
      	public SortClass(int sNumber,String seq) {
		Sq=new SqList(sNumber,seq);
	}

	public long BubbleSort() {
		int[] rtemp=new int[Sq.length];
		System.arraycopy(Sq.r,0,rtemp,0,Sq.length);
		int i,j,temp;
		long start=System.currentTimeMillis();//记录开始时间
		for(i=0;i<Sq.length-1;i++)
		    for(j=0;j<Sq.length-i-1;j++)
			if(rtemp[j]>rtemp[j+1]) {
				temp = rtemp[j];
				rtemp[j] = rtemp[j+1];
				rtemp[j+1] = temp;
			}
		long end=System.currentTimeMillis();//记录完成时的时间
		return(end-start);
	}
	
	
	public long ShellSort() {
		int[] rtemp=new int[Sq.length];
		System.arraycopy(Sq.r,0,rtemp,0,Sq.length);
		int gap,i,j,temp;
		long start=System.currentTimeMillis();//记录开始时间
		for(gap=Sq.length/2;gap>0;gap/=2)
			for(i=gap;i<Sq.length;i++)
				for(j=i-gap;j>=0 && rtemp[j]>rtemp[j+gap];j-=gap){
					temp = rtemp[j];
					rtemp[j] = rtemp[j+gap];
					rtemp[j+gap] = temp;
				}
		long end=System.currentTimeMillis();//记录完成时的时间
		return(end-start);
	}
	
      	public long InsertSort() {
		int[] rtemp=new int[Sq.length];
		System.arraycopy(Sq.r,0,rtemp,0,Sq.length);
		int i,j,temp;
		long start=System.currentTimeMillis();//记录开始时间
		for(i=1;i<Sq.length;++i)
         	    if(rtemp[i]<rtemp[i-1]) {
           	      temp=rtemp[i];
           	      for(j=i-1;(j>=0)&&(temp<rtemp[j]);--j)
            	            rtemp[j+1]=rtemp[j];
            	      rtemp[j+1]=temp;
              	    }
		long end=System.currentTimeMillis();//记录完成时的时间
		return(end-start);
     	}

	public long BInsertSort() {
		int[] rtemp=new int[Sq.length];
		System.arraycopy(Sq.r,0,rtemp,0,Sq.length);
		int low,high,m,i,j,temp;
		long start=System.currentTimeMillis();//记录开始时间
		for(i=1;i<Sq.length;i++){
			temp = rtemp[i];
			low = 0; high = i-1;
			while(low<=high){
				m = (low+high)/2;
				if(temp<rtemp[m]) high = m-1;
				else low = m+1;
			}
			for(j=i-1;j>=high+1;j--)
				rtemp[j+1] = rtemp[j];
			rtemp[high+1] = temp;
		}
		long end=System.currentTimeMillis();//记录完成时的时间
		return(end-start);
	}




//快速排序
//交换顺序表Sq中子表
	void QSort(int[] rtemp,int low,int high) {
		int  i,pivot,j;
		if(low<high) {
		  pivot=rtemp[low];
		  i=low;j=high;
		  while(i<j) {
			while(i<j &&rtemp[j]>=pivot) j--;
			if(i<j) rtemp[i++]=rtemp[j];
			while(i<j && rtemp[i]<=pivot) i++;
			if(i<j) rtemp[j--]=rtemp[i];
		  }
		rtemp[i]=pivot;
		QSort(rtemp,low,i-1);
		QSort(rtemp,i+1,high);
		}
	}
// 快速排序,不稳定,时间复杂度为O(n*n)
	long QuickSort(){
		int[] rtemp=new int[Sq.length];
		System.arraycopy(Sq.r,0,rtemp,0,Sq.length);
		long start=System.currentTimeMillis();//记录开始时间
		QSort(rtemp,0,Sq.length-1);
		long end=System.currentTimeMillis();//记录完成时的时间
		return(end-start);
	}//快速排序结束

//简单选择排序
	int SelectMinKey(int[] rtemp,int start){
		int re=start;
		for(int i=start;i<Sq.length;i++){
			if(rtemp[i]<rtemp[re])
			      re = i;
		}
		return re;
	}

	long SelectSort(){
		int[] rtemp=new int[Sq.length];
		System.arraycopy(Sq.r,0,rtemp,0,Sq.length);
		int i,j,temp;
		long start=System.currentTimeMillis();//记录开始时间
		for(i=0;i<Sq.length;i++){
			j = SelectMinKey(rtemp,i);
			if(i!=j) {
			      temp=rtemp[i];
			      rtemp[i]=rtemp[j];
			      rtemp[j]=temp;
			}
		}
		long end=System.currentTimeMillis();//记录完成时的时间
		return(end-start);
	}//快速排序结束

//堆排序开始
	void HeapAdjust(int[] rtemp,int s,int m) {
		int i,j;
		int rc=rtemp[s];
		for(j=2*s;j<=m;j*=2) {
		    if(j<m && rtemp[j]<rtemp[j+1]) ++j;
		    if(rc >= rtemp[j]) break;
		    rtemp[s] = rtemp[j];
		    s=j;
		}
		rtemp[s] = rc;
	}

	long HeapSort() {
		int[] rtemp=new int[Sq.length];
		System.arraycopy(Sq.r,0,rtemp,0,Sq.length);
		int i,temp;
		long start=System.currentTimeMillis();//记录开始时间
		for(i=Sq.length/2; i>=0; --i)
			HeapAdjust(rtemp,i,Sq.length-1);
		for(i=Sq.length-1;i>=1;--i) {
			temp=rtemp[0];
			rtemp[0]=rtemp[i];
			rtemp[i]=temp;
			HeapAdjust(rtemp,0,i-1);
		}
		long end=System.currentTimeMillis();//记录完成时的时间
		return(end-start);
	}//堆排序结束
}


class result extends Frame{
	long[] time=new long[7];//存放各排序所用时间的数组
	int num;//排序的总数目
      public result(long[] x,int num){
   	        this.setVisible(true);
   	        this.setSize(600,450);
   	        this.setBackground(Color.white);
   	               time=x;
   	               this.num=num;   
       }
   public void paint(Graphics g){  //定义Graphics类g用来画图
   	    int[] length=new int[7];
   	    g.setColor(Color.BLUE);
   	    g.drawLine(50,60,50,400);//画纵坐标
   	    g.drawLine(50,400,480,400);//画横坐标
		g.drawLine(50,60,46,64);//纵坐标箭头
		g.drawLine(50,60,54,64);//纵坐标箭头
		
		for(int i=0;i<=5;i++) {//画标尺
	       g.drawLine(45,i*50+100,50,i*50+100);
		}
		
		   long max=0;
		   for(int i=0;i<7;i++)if(time[i]>=max)max=time[i];
		   for(int i=0;i<7;i++)length[i]=(int)(time[i]*300/max);
		for(int i=0;i<=5;i++) //画标尺上的刻度
		   g.drawString(String.valueOf((int)(max*(6-i)/6)),10,i*50+100);
		Color color[]={Color.BLUE,Color.RED,Color.PINK,Color.ORANGE,Color.GREEN,Color.YELLOW,Color.MAGENTA};
		for(int i=0;i<7;i++) {
			if(time[i]!=-1l){
			g.setColor(color[i]);
			g.drawString(gui.name[i],60*(i+1),420);
			g.fillRect(60*(i+1),400-length[i],40,length[i]-1);
			g.drawString(String.valueOf(time[i])+"ms",60*(i+1),80);
			}
		}
		g.drawString("时间:ms",60,60);
		g.drawString("(排序法)",500,420);
		g.drawString("待排序的数数量为"+num,220,60);
   }
}

⌨️ 快捷键说明

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