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