冒泡排序正宗版和优化版

首先我们来看看正宗的冒泡排序,实际上就是有缺点的金典冒泡。

	void BubbleSort(SqList *L) {
		int i,j;
		for(i = 1;i<L->length;i++) {
			for(j = L->length-1;j>=i;j--) { // 注意:j是从后往前循环
				if(L->r[j] > L->[j+1]) {
					swap(L,j,j+1); // 交换L->r[j] 和 L->r[j+1]
				} // Of if
			} // Of for j
		} // Of for i
	} // Of BubbleSort

较小的数字如同冒泡一样慢慢浮到上面,因此得名冒泡算法。可是要是数据是这样{2,1,3,4,5,6,7,8,9}只有前面两个数字乱的,后面都排好了,你这样再从最后一个比较,就很傻对不对?所以我们需要改进代码,增加一个标记量flag来实现算法的改进。

	void BubbleSort(SqList *L) {
		int i,j;
		Status flag = TRUE;  // flag 用来作为标记
		for(i = 1;i < L->length && flag;i++) { 
			flag = FALSE; //初始为false
			for(j = L->length-1;j>=i;j--) { // 注意:j是从后往前循环
				if(L->r[j] > L->[j+1]) {
					swap(L,j,j+1); // 交换L->r[j] 和 L->r[j+1]
					flag = TRUE; // 如果有交换,flag 为true
				} // Of if
			} // Of for j
		} // Of for i
	} // Of BubbleSort

也就是我们立一个flag,如果一次循环有比较,那么下一次可能会比较。如果从低到向上都没有比较,说明以后顺序都排好了,不用循环了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值