冒泡排序的优化以及对public static void main(String[]args)的解释。

package sixhomework;
import java.util.Scanner;
public class work16 {
	public static void main(String[] args) {
		/*
		 * 从键盘输入三个整数,实现从小到大排序
		 * 分析:先输入三个数,然后比较大小
		 */
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入三个数");
		int a = scan.nextInt();
		int b = scan.nextInt();
		int c = scan.nextInt();
		int e;
		int[]d = new int[] {a,b,c};
		for(int i=0;i<d.length-1;i++) {
			for(int j=0;j<d.length-1-i;j++) {
				if(d[j]>d[j+1]) {
					e=d[j];
					d[j]=d[j+1];
					d[j+1]=e;
				}
			}
		}
		for(int i=0;i<d.length;i++) {
			System.out.println(d[i]);
		}
	}
}

这是昨天的冒泡排序代码,后来在仔细研究这个代码,发现它在几轮排序后有的时候一轮排序并不会改变位置,而这个时候就相当于白白浪费了排序次数,那有没有优化的方法呢?在经过研究别的大佬的博客,就发现的确有优化的方法,那就是加入一个Boolean型判断,当在本轮排序的时候,如果位置没有改变就说明是有序的,这个时候就可以跳出本轮循环,从而继续下一轮比较。看代码

package feisi.day01;

import java.util.Arrays;

public class eg6 {

	public static void main(String[] args) {
		/*
		 * 一个十个数的数组,然后从小到大排序
		 * 分析:先随机生成一个十位数的数组,然后使用冒泡排序来进行排序
		 */
		
		int[]a=new int[] {12,23,4,51,57,61,1,86,91,98};
		
		for(int i =0;i<a.length-1;i++) {//控制比较轮次,一共比较数组长度减一次
			int t =0;//该变量用来交换两个数据值的中间量
			boolean flag=true;
			for(int j=0;j<a.length-1-i;j++) {//控制两个挨着的元素比较
				if(a[j]>a[j+1]) {
					t = a[j];
					a[j]=a[j+1];
					a[j+1]=t;
					flag = false;//如果元素交换了说明无序,而没有交换的话就说明元素已经是有序的了
				}
                conut++;
				if(flag) {
				break;
			            }//这一行代码得意思是终止当前内存循环,继续外层循环。
			}
			
			
		}
		System.out.println(Arrays.toString(a));//以数组形式输出
		System.out.println("比较的次数:"+count);
	}

}

其中if判断语句一定要看清楚放的位置,一定是用来终止里面的循环,而不是外面的。(亲身经历),另外在查找数据的时候我还有了一个疑问,就是import static void main(String [] args)这一个语句 的具体意思。也查找了一下资料,其中public是一个修饰词,同时声明主函数为public就是告诉其他的类可以访问这个函数,static也是个修饰符,表示main函数是一个静态函数,不需要实例化对象就可以使用(这个实例化还有点没搞明白),void则表明返回值是无类型的,string[] 表示接收的字符串数组。 args 这个名字可以是任意的。至于为啥写这个是因为是一个单词的缩写(这一部分内容是借鉴一些博客大佬的),另外还有一个main,就相信大家都知道了,就是程序的入口。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值