您的位置首页百科知识

java如何用快速排序法对数组排序(带窗口界面)

java如何用快速排序法对数组排序(带窗口界面)

的有关信息介绍如下:

java如何用快速排序法对数组排序(带窗口界面)

快速排序法是对气泡排序法的一种改进方法,它的排序算法比较快,且效率很高;下面小编给出以下实现方法。并且建立了一个界面小程序,希望对大家有用,并且采用该段小程序,以后自己就可以当工具用了。

1.快速排序算法:

快速排序算法的基本原理:通过一趟排序将排序的数据分割成两个部分,一部分的数据比另个部分的数据小,然后,按照上述原理再次对两个小部分在次分割,几次往复,就可以实现对数据的排序了。其大概过程,可以可参考下图。

2.打开编程软件:

打开自己的IDE如图所示,小编的是eclipse软件。

3.建立一个java工程:

对于java工程的小伙伴们,相信大家都是老司机了,能够自己完成的;

工程的目录层次和开始的界面,如图所示。

1.类的结构:

本实例中,采用一个整体的类来实现的,当然也可对不同的工程建立不不同的类,有想法的小伙伴们可以自己想想。类中涉及到,文本框,按钮,标签等属性,设计到构造方法,数据获取方法,排序方法,事件处理方法和main方法等一下方法。

2.构造方法:

该法主要对类中的属性进行初始化,本实例中主要涉及到对界面窗口控件的初始化,代码如下:

public QuickSort(){

jp.setLayout(null);

jl.setBounds(30, 10, 340, 36);

jp.add(jl);

jl2.setBounds(30,130,100,30);

jp.add(jl2);

jsp_in.setBounds(30, 45, 340, 70);

jp.add(jsp_in);

jta_in.setLineWrap(true);

jsp_out.setBounds(30, 165, 340, 170);

jp.add(jsp_out);

jta_out.setLineWrap(true);

jb_act.setBounds(200, 125, 70, 30);

jp.add(jb_act);

jb_cle.setBounds(300, 125, 70, 30);

jp.add(jb_cle);

jb_act.addActionListener(this);

jb_cle.addActionListener(this);

this.add(jp);

this.setTitle("选择法排序");

this.setBounds(100, 100, 400, 400);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

this.setResizable(false);

}

3.数据获取方法:

该方法主要对从窗口的文本框空间中获取的数据进行相关的处理,用于获取我们想要输入的数组,主要涉及到对数据的检验和数据的转换,代码如下:

public void getArray(){

String arrayStr=jta_in.getText().trim();

if(arrayStr.equals("")){

JOptionPane.showMessageDialog(null,"请输入数字内容");

return;

}

for(int i=0;i

char charAt=arrayStr.charAt(i);

if(!Character.isDigit(charAt)&&(charAt!=' ')&&(charAt!='.')){

JOptionPane.showMessageDialog(null,"输入包含非数字内容");

jta_in.setText("");

return;

}

}

String[] numStrs=arrayStr.split(" {1,}");

double[] numArray=new double[numStrs.length];

for(int i=0;i

String[] temp=numStrs[i].split(".{1,}");

char[] tempstrs=numStrs[i].toCharArray();

if((tempstrs=='.')||(tempstrs[tempstrs.length-1]=='.')||(temp.length>=3)){

JOptionPane.showMessageDialog(null,"输入包含非数字内容");

jta_in.setText("");

return;

}

numArray[i]=Double.valueOf(numStrs[i]);

}

array=numArray;

}

4.排序方法:

该方法是本实例实现的核心代码,主要采用快速排序法对数据进行排序,代码如下,有些晦涩难懂,希望老司机小伙伴们认真的读读:

public void quickSort(double[] sortarray,int lowIndex,int highIndex){

int lo=lowIndex;

int hi=highIndex;

double mid;

if(highIndex>lowIndex){

mid=sortarray[(lowIndex+highIndex)/2];

while(lo<=hi){

while((lo

++lo;

}

while((hi>lowIndex)&&(sortarray[hi]>mid)){

--hi;

}

if(lo<=hi){

double temp;

temp=sortarray[lo];

sortarray[lo]=sortarray[hi];

sortarray[hi]=temp;

for(int k=0;k

jta_out.append(array[k]+" ");

}

jta_out.append("\n");

++lo;

--hi;

}

}

if(lowIndex

quickSort(sortarray,lowIndex,hi);

}

if(lo

quickSort(sortarray,lo,highIndex);

}

}

}

5.事件处理方法:

用于对按钮事件的处理,实现gui人机交互,具体代码如下:

public void actionPerformed(ActionEvent e){

if(e.getSource()==jb_act){

getArray();

quickSort(array,0,array.length-1);

}else{

jta_in.setText("");

jta_out.setText("");

}

}

6.main方法:

main方法的代码如下:

public static void main(String[] args) {

new QuickSort();

}

1.编译和运行:

单击eclipse工具栏中的“编译与运行”按钮,会出现我们的程序窗口界面如下图示。

2.排序效果:

对于出来的窗口界面,在输入框中输入相应的数据,然后单击“排序”按钮,就会出现我们的排序结果,如图中所示。