每天一个排序--冒泡排序

本文详细解析了冒泡排序的工作原理,通过双重循环实现排序,并探讨了其时间复杂度和空间复杂度。同时,介绍了如何通过设置标志位优化冒泡排序,减少不必要的比较轮次,提高效率。冒泡排序是一种稳定的排序算法,平均时间复杂度为O(n²)。
摘要由CSDN通过智能技术生成

                      💀内卷起来😏💀

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LiP6YGN5LiJ5Y2B5YWt5bK4,size_15,color_FFFFFF,t_70,g_se,x_16

分析:用双重循环实现冒泡排序,外层循环控制轮数与元素个数有关,即n个元素需要n-1轮。内层循环控制需要比较的相邻元素个数,与外层循环的轮数有关,即第i轮(i=1,i=n-1)时,内层需要比较n-i对相邻元素,当轮数增大时,已经找到位置的元素个数随之增大,那么内层待比较元素的对数随之减少。

步骤:

  1. 比较相邻两个数的大小,如果第二个数小就交换
  2. 从前往后依次比较,每一轮最后一组比较完成后,最大数会排在末尾
  3. 重复上述过程

动态图解:

f167e5271a634801ad0a52224a97f083.gif

 void BubbleSort(int r[],int n){

   int i,j,t;

   for(i=1,i<=n-1:i++){//控制轮数

       for(j=0;j<=n-1-i;j++){//每一轮对无序元素比较次数

          if(r[j]>r[j+1]){//如果前面数大于后面数就交换

               t=r[j];

               r[j]=r[j+1];

               r[j+1]=t;

           }

      }

   }

}

😂前面所用的冒泡排序不论情况好坏,都要进行n-1轮,如果到第i轮已经排好就不需要进行下一轮了,所以上面的冒泡排序是可以改进的。

  • 优化;

void BubbleSort(int r[],int n){

    //设置swapflag为某轮是否有元素的标记,有交换为1没有为0

//为保证第一轮必须扫描,所以它的初始值为1

  int swaplfag=1;

   for(int i=1;swapflag && i<n;i++){

        swapflag=0;//开始为0

        for(int j=0;j<=n-1-i;j++){

             if(r[j]>r[j+1]){

                   int t=r[j];

                   r[j]=r[j+1];

                   r[j+1]=t;

                 swapflag=1;//设置成有元素交换的值

              }

        }

   }

}

平均时间复杂度:O(n²)

空间复杂度:O(1)

稳定性:冒泡排序是稳定算法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LiP6YGN5LiJ5Y2B5YWt5bK4,size_19,color_FFFFFF,t_70,g_se,x_16

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值