📄 gui.java
字号:
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 + -