冒泡算法个人理解

排序算法-冒泡排序

代码

int a[8] = { 80, 2, 3, 24, 34, 90, 32, 43};
		for (int Z = 0; Z < 8; Z++)  //比较n-1轮
		{
			std::cout << a[Z] << " ";
		}
		std::cout << std::endl;
	
		for (int i = 0; i < 8 - 1; i++)  //比较n-1轮
		{
			for (int A = 0; A < 8 - 1 - i; A++)  //每轮比较8-1-i次,
			{
			int B = A+1;
				if (a[A] < a[B])
				{
					int tmp = a[A];
					a[A] = a[B];
					a[B] = tmp;
				}
			}
			for (int Z = 0; Z < 8; Z++)  //比较n-1轮
			{
				std::cout << a[Z] << " ";
			}
			std::cout << std::endl;
		}

结果

在这里插入图片描述

注释

数组大小为N,比较开始值的角标为A,被比较的值的角标为B

算法解释

比较思路

首选看第二个循环,在冒泡算法中A与B的关系为B = A+1;
再次看第二个循环,冒泡算法的比较思路为在将A的值与B的值进行比较,如果B与A的值满足条件,则发生值互换,而不论该次是否发生互换,则本次循环结束,A与B同时加1,直至B等于该数组最大值;

循环限制思路

此时返回第一个循环处:当第一个循环第一次结束后,满足条件的值已经被放至该数组最后一位;所以在第一个循环进入下一次后,则最后一位不需要再次进行比较;因此每一轮的循环后,都会在后面产生对应数量的不需要比较的值的数量,因此第二个循环不需要进行全部的比较排序;并且为了保证B值不会越界,所以在第二个循环中A值最大只能为该数组大小-1

并且,由比较思路可以看出,因为A与B的关系,因此该比较算法需要进行的大循环的次数为N-1次;

在这一过程中的数组中的每一个元素进行呼唤逐渐变为有序的过程就是冒泡排序

比较次数

算法解释可以看出
第一次比较的数量为 N-1 - 0(已经循环次数)
第二次比较的数量为 N-1 - 1(已经循环次数)
第三次比较的数量为 N-1 - 2(已经循环次数)
所以该算法的比较次数为 N-1+N-2+N-3+***+1 = N ( N– 1) / 2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值