排序算法之冒泡排序

排序算法之冒泡排序

本文主要介绍冒泡排序的原理及其代码实现

冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一 个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作

首先,来看一组数据4,5,6,3,2,1,从小到大进行排序,第一趟冒泡的结果如下图所示:
在这里插入图片描述
在这里插入图片描述
从上图可以知道,每趟冒泡都是在执行如下操作:判断和交换.这两个操作想必大家都很熟悉了.代码实现如下:

for(int j=0;j<n-1;j++)
  if (a[j] > a[j+1]) { // 交换,左边的数大于右边就交换,因此这是升序        
      int tmp = a[j];        
      a[j] = a[j+1];        
      a[j+1] = tmp;            
  } //这是冒泡排序的核心代码

当第一趟冒泡结束之后,将本趟冒泡产生的最大数或者最小数放置到数组的末端,同时它将不在参与下一次排序.例如:第一趟排序之后,6是数组中最大的数,将6赋值给a[5],a[5]便变成了a[0]~a[5]中最大的数,a[5]就不用在参与后面的排序了;第二趟排序之后,将5赋值给a[4],a[4]便变成了a[0]~a[4]中最大的数,a[4]也不用在参与后面的排序,以此类推.一共需要进行n趟才能将数组排序完毕,例如:上述数组a的长度n=6,经历了6趟.代码实现如下:

 public void bubbleSort(int a[],int n){
       if(n<=1) return;
       for(int i=0;i<n;i++){//其实i<n-1也是可以的,因为当i=n-1时,j<0,内层循环不符合条件
           for(int j=0;j<n-i-1;j++){
              if(a[j]>a[j+1]){//交换
                 int tmp=a[j];
                 a[j]=a[j+1];
                 a[j+1]=tmp;
              }
           }
       }
    }

冒泡排序的优化
当某次冒泡操作已经没有数据交换时,说明已经达到完全有序,不用再继续执行后续的冒泡操作。
在这里插入图片描述
代码实现如下:

 public void bubbleSort(int a[],int n){
       if(n<=1) return;
       for(int i=0;i<n;i++){
           //提前退出冒泡循环的标志位
           boolean flag=false;
           for(int j=0;j<n-i-1;j++){
              if(a[j]>a[j+1]){//交换
                 int tmp=a[j];
                 a[j]=a[j+1];
                 a[j+1]=tmp;
                 flag=true;//表示有数据交换
              }
           }
           if(!flag)break;//没有数据交换提前退出
       }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值