java之冒泡排序

1 . 什么是冒泡排序?
网上查了点资料,也没有找到什么有用的概念,大致的意思都是 相邻的两个数两两做比较。根据相应的规则(比较大的往后放或比较小的往后放)放置两数的位置:

规则:大的数往后靠
比较前: 2,1
比较后: 1,2     

2 . 实战
假设有这样一个数组

    int arr[] ={ 2,5,1,4,3,6 }

冒泡排序是这样排的:

规则:小的往后靠
拿第一个数开始与其后面的做比较。
第一次比较:
 2<5  true  所以 25 的位置变换
     现在 arr是这样的
     int arr[] = { 5,2,1,4,3,6 }
 2<1  false 所以 21 的位置不变
     int arr[] ={ 5,2,1,4,3,6 }
     由于刚才的位置未放生变化,那就拿1与其后面的数继续比较
 1<4  true  所以 14 的位置变换
     现在 arr是这样的 
     int arr[] = { 5,2,4,1,3,6 }
 1<3  true  所以 13 的位置变换
     现在 arr是这样的 
     int arr[] ={ 5,2,4,3,1,6 }
 1<6  true  所以 16 的位置变换
     现在 arr是这样的 
     int arr[] ={ 5,2,4,3,6,1 }
一共是比较了5次。
这样第1次比较就完了,最终将最小值1确定到了最后1位,不需要再做比较。

接着进行第二次比较:
与刚才类似:依然是拿第一个数“5”与其后的数做比较。由于数字1已确定为最小,所以不用比较。这样就只需要比较4次。
比完后是这样的:

    int arr[] ={ 5,4,3,6,2,1 }

依次类推:第3次比较比3次,结果是这样的

    int arr[] ={ 5,4,6,3,2,1 }

接着就是这样的:

4次比2int arr[] ={ 5,6,4,3,2,1 }
第5次比1int arr[] ={ 6,5,4,3,2,1 }

数组 arr[] 的长度是6.
一共是比了5次,而每次比较中两两之比的次数又是递减的。
因此可以得出以下图示:

外循环内循环
第1次比较比了5次
第2次比较比了4次
第3次比较比了3次
第4次比较比了2次
第5次比较比了1次

3 . 代码
这冒泡排序是不是就这样出来了?

就拿刚刚的数组为例子:
首先:
    一共需要比较多少次:
        for(int i=0;i<arr.length-1;i++){}
    一次比较里面两两相比需要多少次:
        for(int j =0;j<arr.length-1-i;j++){}    
    如果arr[j]上的值小于arr[j+1]上的值就变换位置   
        if(arr[j]<arr[j+1]){
            int temp=arr[j+1];
            arr[j+1]=arr[j];
            arr[j]=temp;
        }      

最终冒泡排序的代码为:

    for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-1-i;j++){          
                if(arr[j]<arr[j+1]){
                    int temp=arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=temp;            
                }               
            }           
        }

补张图:
Bubble Sort

结束,收工。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值