【排序算法】冒泡排序

冒泡排序是运用蛮力法解决排序的一种算法,这种算法比较清晰易懂

基本思想

两两比较相邻数据,如果反序则交换,直到没有反序的数据为止

实现思路

在这里我们以升序排列为例子

  1. 将整个待排序的记录序列划分成有序区和无序区,初始时有序区为空
  2. 对无序区从前向后依次比较相邻记录,若反序则交换,从而使值较大的记录往后移动(像气泡一样浮上来)
  3. 重复执行第二步,直到无序区没有反序的记录

设计代码时,我们可以用一个标记来记载最后一次发生交换时的位置,这样,若这个值为0,则说明无序区内没有发生交换,此时无序区已经有序,算法即完成了

思想图解

初始序列
初始序列,其中蓝色区域为无序区,红色为有序区,初始有序区为空,记载i=0
第一趟
两两数字进行比较,反序则交换,最后一次发生交换是在6与7位置,记i=6,执行一趟排序后,有序区中有一个数据,新的无序区为[0,6]
i不为0,则进行下一趟排序,并让i=0
第二趟
同样执行第一趟的步骤,执行完后无序区为[0,4]
i不为0,则进行下一趟排序,并让i=0
第三趟
同样执行第一趟的步骤,执行完后无序区为[0,3]
i不为0,则进行下一趟排序,并让i=0
第四趟
执行完这一趟排序后,i=0,说明这一趟并没有反序交换(或者交换发生在0与1号位置),无序区数据都已有序,算法结束

算法代码
void bubbleSort(int r[], int n) {
	int bound, exchange = n - 1;
	while (exchange != 0) {
		bound = exchange;
		exchange = 0;
		for (int i = 0; i < bound; i++) {
			if (r[i] > r[i + 1]) {
				int temp = r[i];
				r[i] = r[i + 1];
				r[i + 1] = temp;
				exchange = i;
			}	
		}
	}
}

代码还是比较简单的,认真看一下就能看懂

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值