现在的位置: 首页 > 综合 > 正文

算法_冒泡排序法(04)

2017年04月15日 ⁄ 综合 ⁄ 共 1089字 ⁄ 字号 评论关闭

java源代码实现:

public class Bubble {
	//冒泡排序法
	public void sort(int [] arr){
		//外层循环
		//决定此排序走几趟
		for(int i=0;i<arr.length-1;i++){//由于是前面一个数和后面一个数比较,必须保证后面一个数不能越界,所以length-1
			//内层循环
			//交换
			for(int j=0;j<arr.length-1-i;j++){//进行一次循环后,最后一个数肯定排好了,类推,循环几次后,后面就有几个数已经排好了
				if(arr[j]>arr[j+1]){
					int temp=arr[j];//把较大的数记录下来
					arr[j]=arr[j+1];//此处就是为什么外层for循环必须-1的原因了,否则会越界
					arr[j+1]=temp;
				}				
			}
		}
	}
	//显示
	public void show(int []arr){
		for(int i:arr){
			System.out.print(i+" ");
		}
	}
}

测试代码:

public static void main(String[] args) {
		final int COUNT=100000;//十万
		int []arr=new int[COUNT];//={1,6,0,-1,9,-2,12,-90};
		for(int i=0;i<COUNT;i++){
			arr[i]=(int)(Math.random()*COUNT);//Math.random产生一个0~1的小数,且速度比Random快,因为Random需要实例化;随机COUNT个数
		}		
		
		long start=System.currentTimeMillis();
		//创建一个冒泡类
		Bubble b=new Bubble();
		b.sort(arr);		
		long end=System.currentTimeMillis();
		System.out.println("排序使用的时间是:"+(end-start)/1000+"s");
	}

运行结果:

排序使用的时间是:31s

这是一个最经典的排序方法,第一个算法就是学的他,虽然速度有点慢,但是基本思想还是需要了解一下的

总结:

后面三个排序法,对于10万个无序整数来说,插入式排序(7s)比选择式排序(16s)快一倍,而选择式排序(16s)又比冒泡排序(31s)快一倍,可十万数据量对快速排序法来说,简直就是小儿科(16ms);哪怕是一亿个无序整数排好也只需要22s,因此在不需要考虑内存开销的情况下,优先考虑快速排序法,需兼顾速度和内存开销的情况下,可选择插入式排序法
当然还有其他排序方法,目前只接触这常见的4种排序方法,欢迎和大家一起讨论学习

抱歉!评论已关闭.