冒泡排序算法的理解和优化 (java)

鉴于自己每次明白了算法下次又忘记,可能就是没有完全明白,所以才会忘记。


一、基本思路

冒泡排序法的基本思想就是:数组内容从前往后相邻的两个数依次进行比较,把较大的数往后移动,从而一轮最终把最大的数放最后面。

int a[]={7,5,8,3};
//1轮1次比较:7和5交换,结果为{5,7,8,3}
//1轮2次比较:7和8不变,结果为{5,7,8,3}
//1轮3次比较:8和3交换,结果为{5,7,3,8}

//1轮结果为{5,7,3,8}

第一轮结束,最大的只已经放到最后面,所以下次排序只需要对前面的三个数进行比较。

//2轮1次比较:5和7不变,结果为{5,7,3,8}
//2轮2次结果:7和3交换,结果为{5,3,7,8}

//2轮结果:{5,3,7,8}

第二轮结束,又把第二大的数放到了最大数的前面,所以下次比较直比较前面两个数即可。

//3轮1次交换:5和3交换,结果为{3,5,7,8}

第三轮结束,完成从小到大的排序。

总结:所以外循环是从小到大1,2,3轮,而内循环是比较的次数从大到小3,2,1次。意思就是第一轮内循环3次,第二轮内循环2次,第三轮内循环1次。

二、算法实现

1.基础实现和优化实现

public class Test{
    public static void main(String asgr[]){
        int a[]={8,6,9,4,7,3,5,2,1};
        BubbleSort bsort=new BubbleSort();
        //bsort.bubble_sort(a);
        bsort.bubble_sort_better(a);
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    } 
}


public class BubbleSort{
//基本实现
    public void bubble_sort(int a[]){
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a.length-1-i;j++){    
                if(a[j]>a[j+1]){
                    int t=a[j+1];
                    a[j+1]=a[j];
                    a[j]=t;
                }
            }
        }  
    }
//优化实现
    public void bubble_sort_better(int a[]){
        for(int i=0;i<a.length;i++){
            Boolean boo=true;
            for(int j=0;j<a.length-1-i;j++){    
                if(a[j]>a[j+1]){
                    boo=flase;//发生交换
                    int t=a[j+1];
                    a[j+1]=a[j];
                    a[j]=t;
                }
            }
            if(boo) break;
/*
这里的意思是如果内循环比较一圈并没有发生交换,说明该数组已经是有序的了,可以不用在排序,所以
break跳出当前最近的整个循环。
比如:数组是{5,1,2,3,4},这里只在i=0是时候,j循环了一圈,结果就为{1,2,3,4,5}。而正常的基本实
现,还会循环i=1,2,3,4,所以被必要,即可停止。
*/
        }  
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值