层层优化的选择排序

标签: 优化 选择排序 | 发表时间:2012-10-05 10:17 | 作者:邹振文
出处:http://www.blogjava.net

Java中 main方法的args

               首先我想说一下java中的main方法中的args,在java中的定义格式是这样的:

               public static void main(String[] args)

               {

                        //函数体

               }

               我们可以看到它的参数其实是一个数组,其实数组就是我们在执行命令时的命令行参数,如图所示:

              输入1-10个数,进行选择排序,代码如下:

 

[java]  view plain copy
  1. public class TestSelectSort  
  2. {  
  3.     public static void main(String args[])  
  4.     {  
  5.         //如果输入的长度不符合,那么就提示重新输入  
  6.         if(args.length<=0 || args.length>10)  
  7.         {  
  8.             System.out.println("输入的数据长度有误,请重新输入!");  
  9.             System.exit(-1);  
  10.         }  
  11.           
  12.           
  13.         //将字符串数组转换成Double型数组 存入到dblInput中  
  14.         int[] intInput;  
  15.         intInput=new int[args.length];  
  16.         try  
  17.         {  
  18.             for(int i=0;i<args.length;i++)  
  19.             {  
  20.                 intInput[i]=Integer.parseInt(args[i]);  
  21.             }  
  22.         }  
  23.         catch(Exception ex)  
  24.         {  
  25.             ex.printStackTrace();  
  26.             System.exit(-1);  
  27.         }  
  28.           
  29.         //首先打印输入的数字序列  
  30.         Print(intInput);  
  31.         SelectSort(intInput);  
  32.         Print(intInput);  
  33.     }  
  34.       
  35.     //定义一个打印的方法  
  36.     public static void Print(int[] a)  
  37.     {  
  38.         for(int i=0;i<a.length;i++)  
  39.         {  
  40.             System.out.print(" "+a[i]);  
  41.         }  
  42.         System.out.println();  
  43.     }  
  44.       
  45.     //定义一个排序的算法  
  46.     public static void SelectSort(int[] a)  
  47.     {  
  48.         //对这个数组进行排序  
  49.         for(int i=0;i<a.length-1;i++)  
  50.         {  
  51.             for(int j=i+1;j<a.length;j++)  
  52.             {  
  53.                 //如果小于,那么就交换  
  54.                 if(a[i]>a[j])  
  55.                 {  
  56.                     int temp;  
  57.                     temp=a[i];a[i]=a[j];a[j]=temp;                                                
  58.                 }  
  59.             }             
  60.         }     
  61.     }  
  62. }  

          在这里我想强调一下,对于一些独立的功能最好是写成独立的函数

          这样看起来清楚,也可以提高复用性。

          运行结果如图所示:

          

       第一步优化选择算法

       我们仔细分析一下这个选择算法,不难看出,是还可以挖掘效率的,因为里面有很多次的交换是没有意义的。所以,我们这样分析,每一次内层的循环都是找出  索引i(包括i)以后最小的数,然后最多只做一次交换,代码如下(主要展示算法的代码):

          

[java]  view plain copy
  1. //定义一个排序的算法  
  2.     public static void SelectSort(int[] a)  
  3.     {  
  4.         //对这个数组进行排序  
  5.         for(int i=0;i<a.length-1;i++)  
  6.         {  
  7.             int k=i;  
  8.             for(int j=i+1;j<a.length;j++)  
  9.             {  
  10.                 //如果小于,那么就交换  
  11.                 if(a[k]>a[j])  
  12.                 {  
  13.                     k=j;                                                  
  14.                 }  
  15.             }  
  16.             //如果a[i]不是最小的数,那么再进行交换  
  17.             if(k!=i)  
  18.             {  
  19.                 int temp;  
  20.                 temp=a[i];  
  21.                 a[i]=a[k];  
  22.                 a[k]=temp;  
  23.             }  
  24.         }     
  25.     }  


         通过分配空间,再次提高效率

           如果我们把k和temp拿到上面,也就是先分配好这些变量,后面直接使用,这样就不用每次都分配一个新的空间,分配新的空间必然会浪费一些时间。

           改进后的代码如下:

           

 

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


本文链接

相关 [优化 选择排序] 推荐:

层层优化的选择排序

- - BlogJava_首页
Java中 main方法的args.                首先我想说一下java中的main方法中的args,在java中的定义格式是这样的:.                         //函数体.                我们可以看到它的参数其实是一个数组,其实数组就是我们在执行命令时的命令行参数,如图所示:.

按List中对像某属性排序算法4---JAVA简单选择排序

- - ITeye博客
按List中Person类的age属性进行排序. * User: fuliguo * Date: 12-7-29 * Time: 下午13:09 * To change this template use File | Settings | File Templates. MyPersonListSortTest_SimpleSelection类:.

存储优化

- - CSDN博客推荐文章
定期对存储设备的固件和驱动程序做升级. 选择合适的磁盘阵列,RAID可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率,还能提供容错,冗余的功能,最常用的有raid10和raid5.. 使用主动多路径(Active Multipathing)技术.

mysql优化

- - 数据库 - ITeye博客
公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL  的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库系统,不可能指望 MySQL  默认的系统参数能够让 MySQL运行得非常顺畅. 在Apache, PHP,  MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分.

sql优化

- - 数据库 - ITeye博客
是对数据库(数据)进行操作的惟一途径;. 消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;. 可以有不同的写法;易学,难精通. 固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高. 应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致.

ORACLE:plsql优化

- - CSDN博客数据库推荐文章
 1、登录后默认自动选中My Objects. 设置方法:Tools菜单--Brower Filters会打开Brower Filters的定单窗口,把“My Objects”设为默认即可. 同理,可以在Tools菜单--Brower Filters中把你经常点的几个目录(比如:tables Views Seq Functions Procedures)移得靠上一点,并加上颜色区分,这样你的平均寻表时间会大大缩短,试试看.

hive 优化 tips

- - CSDN博客推荐文章
一、     Hive join优化. 也可以显示声明进行map join:特别适用于小表join大表的时候,SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key. 2.     注意带表分区的join, 如:.

WebLogic 优化

- - 开源软件 - ITeye博客
WebLogic 配置文件(config.xml)包含了大量很直观的与性能有关的参数,能通过配置环境与应用程序得到很好的优化. 基于系统的需要调整这些参数不仅能改善单个点的性能,而且能提高整个应用程序性能的可衡量性. 试着采用下列WebLogic配置方法,或许能使你的系统达到最佳状态:. 一 修改运行队列线程数的值.

DOM优化

- - JavaScript - Web前端 - ITeye博客
1,Javascript语音与DOM操作就像孤岛. 他们之间的通行是要借助船的,而使用船是有很大成本的. 所以,要先做完一个再做另一个,最好不要交替进行. 如:添加1000个li时,先用一个字符串拼接好,最后一次追加到父节点,而不是向父节点追加1000次,一次追加一个. 如:添加1000个li时,先放到fragment,再添加到UL中.

底价优化

- - Koala++&apos;s blog
RTB中引入了修改后的Second-Price竞价模型,竞价成功的广告不需要向Ad-Exchange付他的出价,而只会付第二名的出价.          Second-Price的理论思想是这样的:假设我在卖莫奈的油画. 有许多人想竞得这幅油画,每个人心里都有一个最高出价,但问题是他不想付比能竞得这幅画的出价多一分钱.