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