Java中 main方法的args
首先我想说一下java中的main方法中的args,在java中的定义格式是这样的:
public static void main(String[] args)
{
//函数体
}
我们可以看到它的参数其实是一个数组,其实数组就是我们在执行命令时的命令行参数,如图所示:
输入1-10个数,进行选择排序,代码如下:
- public class TestSelectSort
- {
- public static void main(String args[])
- {
- //如果输入的长度不符合,那么就提示重新输入
- if(args.length<=0 || args.length>10)
- {
- System.out.println("输入的数据长度有误,请重新输入!");
- System.exit(-1);
- }
-
-
- //将字符串数组转换成Double型数组 存入到dblInput中
- int[] intInput;
- intInput=new int[args.length];
- try
- {
- for(int i=0;i<args.length;i++)
- {
- intInput[i]=Integer.parseInt(args[i]);
- }
- }
- catch(Exception ex)
- {
- ex.printStackTrace();
- System.exit(-1);
- }
-
- //首先打印输入的数字序列
- Print(intInput);
- SelectSort(intInput);
- Print(intInput);
- }
-
- //定义一个打印的方法
- public static void Print(int[] a)
- {
- for(int i=0;i<a.length;i++)
- {
- System.out.print(" "+a[i]);
- }
- System.out.println();
- }
-
- //定义一个排序的算法
- public static void SelectSort(int[] a)
- {
- //对这个数组进行排序
- for(int i=0;i<a.length-1;i++)
- {
- for(int j=i+1;j<a.length;j++)
- {
- //如果小于,那么就交换
- if(a[i]>a[j])
- {
- int temp;
- temp=a[i];a[i]=a[j];a[j]=temp;
- }
- }
- }
- }
- }
在这里我想强调一下,对于一些独立的功能最好是写成独立的函数
这样看起来清楚,也可以提高复用性。
运行结果如图所示:
第一步优化选择算法
我们仔细分析一下这个选择算法,不难看出,是还可以挖掘效率的,因为里面有很多次的交换是没有意义的。所以,我们这样分析,每一次内层的循环都是找出 索引i(包括i)以后最小的数,然后最多只做一次交换,代码如下(主要展示算法的代码):
- //定义一个排序的算法
- public static void SelectSort(int[] a)
- {
- //对这个数组进行排序
- for(int i=0;i<a.length-1;i++)
- {
- int k=i;
- for(int j=i+1;j<a.length;j++)
- {
- //如果小于,那么就交换
- if(a[k]>a[j])
- {
- k=j;
- }
- }
- //如果a[i]不是最小的数,那么再进行交换
- if(k!=i)
- {
- int temp;
- temp=a[i];
- a[i]=a[k];
- a[k]=temp;
- }
- }
- }
通过分配空间,再次提高效率
如果我们把k和temp拿到上面,也就是先分配好这些变量,后面直接使用,这样就不用每次都分配一个新的空间,分配新的空间必然会浪费一些时间。
改进后的代码如下:
到此就可差不多了,其实还可以再进行优化的,但是如果过分的话,那么就会降低它的运行效率了。
本文链接