排序之冒泡排序

为什么冒泡排序叫做冒泡排序?

冒泡排序的排序方法像汽水冒泡一样,小气泡一直不停的往上浮。冒泡排序叫做冒泡排序的原因在于在这种排序算法会把排序的元素当成小气泡,根据数值大小,一点一点向着数组的一侧移动。

冒泡排序的移动方式如下:

冒泡排序可以快速编写,在排序元素比较少时比较管用。

冒泡排序的引用场景和使用方式

适用于:数据量不大,并且对稳定性有要求,基本有序的情况

N个数字来排队 两两相比小靠前 外层循环N-1 内层循环N-1-i (i从0开始)

冒泡排序的过程

冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。每一趟遍历,将一个最大的数移到序列末尾。

冒泡排序的实现:

for  ( int  i = 0; i < len; i++) {
         for  ( int  j = 0; j < len - 1 - i; j++) {
             if  (arr[j] > arr[j+1]) {        //相邻元素两两对比
                 int  temp = arr[j+1];        //元素交换
                 arr[j+1] = arr[j];
                 arr[j] = temp;
             }

冒泡排序的改进:

如果序列已经是有序的,可以优化冒泡排序的方法。

具体做法为判断每次排序时是否交换过元素,如果没有,证明有序,排序结束。

优化代码如下:

public class Bubble {
    public static void main(String[] args){
        int[] arr = new int[]{44,3,38,5,47,15,36,26,27,2,46,4,19,50,48};
        int count =0;//排序计数器
        int changId =0;//每次排序的元素位置计数器
        int temp = 0; //比较两个值大小时交换位置用的临时变量
        int ifSwap =0;//比较每次排序过程中是否交换过元素,0-未交换

        for(count =arr.length-1;count>0;count--){
            //一共进行了长度-1次比较
            for(changId=0;changId<count;changId++){
                //每次仅需要比较0...总量-排序次数的元素,后面的元素是排好的
                {
                    if(arr[changId]>arr[changId+1]){
                        temp = arr[changId+1];
                        arr[changId+1]=arr[changId];
                        arr[changId] =temp;
                        ifSwap =1;//设置交换标志
                    }

                    if(ifSwap==0) return;
                }
            }
            for(int i=0;i<arr.length;i++){
                System.out.print(arr[i]+",");
            }
        }
    }

}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值