冒泡排序算法时间复杂度

void bubble2(int a[],int n)
{
    i=n-1;							//1
    do{
      change=FALSE;	  		//n-1或n*(n-1)/2
      for(j=0;j<i;++j)			//n-1或n*(n-1)/2
          if(a[j]>a[j+1])		//n-1或n*(n-1)/2
          {
              a[j]<-->a[j+1];	//0或n*(n-1)/2
              change=TRUE;	//0或n*(n-1)/2
          }
      }while(change&&--i>=1)		//1或n-1
}

最好情况下,T最好(n)=O(f(n))=O(n)
最坏情况下,T最坏(n)=O(f(n))=O(n^2)
算法时间复杂度:O(n^2)

最好的情况,一直顺序排列,即for循环只用运行n-1次
最坏的情况,全部逆序:(以a[4]=54321为例)
从数组第一个元素5开始排序,54321,需和后面数字比较4次,排列后变为43215;
从数组第二个元素4开始排序,43215,需和后面数字比较3次,排列后变为32145;
·
·
·
则若数组有n个数,则for()比较次数(n-1)+(n-2)+(n-3)+```+1=(n-1+1)(n-1)/2=n(n-1)/2;

数据元素是数据的基本单位, 数据项是不可分割的最小单位数据项是构成数据元素的最小单位

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值