首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

层层优化的取舍排序

2012-09-24 
层层优化的选择排序Java中 main方法的args首先我想说一下java中的main方法中的args,在java中的定义式是这

层层优化的选择排序
           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拿到上面,也就是先分配好这些变量,后面直接使用,这样就不用每次都分配一个新的空间,分配新的空间必然会浪费一些时间。           改进后的代码如下:           层层优化的取舍排序

 

          到此就可差不多了,其实还可以再进行优化的,但是如果过分的话,那么就会降低它的运行效率了。


         

热点排行