基本排序算法之冒泡排序

冒泡排序的基本方法是:设待排序元素序列中的元素个数为n,首先比较第1个和第二个元素,如果前一个元素大于后一个元素,则将两个元素互换;然后对第二个(可能是刚换过来的)和第三个元素做同样的处理;重复此过程直到处理完第n-1和第n个元素。我们称它为一趟冒泡排序,结果将最大的元素移到最后一个位置,其他元素也都向排序的最终位置移动,当然个别情况下元素有可能在排序中向相反的位置移动,但元素移动的总趋势是向最终位置移动。这样每一趟冒泡就把排序吗最大的元素移到它最终的位置,最多n-1趟冒泡就能把所有的元素排好序。

优化:

在算法中可增加一个标志exchange,用以标识本趟冒泡结果是否发生了逆序和交换,如果没有发生交换则exchange = false,表示全部元素已经排好序,因而可以终止处理,结束算法。如果exchange = true,表示本趟有元素发生交换,还需执行下一趟排序


代码:
void bubbleSort(int* arr,int n)
{
	bool exchange = false;
	for (int i = 0; i < n-1; i++)
	{
		exchange = false;
		for (int j = 0; j < n - i -1; j++)
		{
			if (arr[j] > arr[j+1])//交换元素
			{
				int tmp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;
				exchange = true;//置exchange为有交换状态
			}
		}
		if (!exchange)
		{
			break;//终止算法
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值