算法_冒泡排序法(04)

来源:互联网 发布:centos 7 mount ntfs 编辑:程序博客网 时间:2024/06/08 10:11

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种排序方法,欢迎和大家一起讨论学习