层层优化的选择排序

           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拿到上面,也就是先分配好这些变量,后面直接使用,这样就不用每次都分配一个新的空间,分配新的空间必然会浪费一些时间。

           改进后的代码如下:

          

 

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


         

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值