冒泡排序

冒泡排序是一种稳定的算法,时间复杂度为O(n^2)

原理:

   冒泡排序算法的规则如下:

(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。

(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,最后的元素是最大的数。

(3)针对所有的元素重复以上的步骤,除了最后一个。

(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码实现:

void BubbleSort(int* a, int length)
{
	if (a == NULL || length < 0 || length == 0)
		return ;
	if (length == 1)
		return;
	for (int i = 0; i < length - 1; i++)
	{
		for (int j = 0; j < length - 1 - i; j++)
		{
			if (a[j] > a[j + 1]) 
			{
				    int temp;
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
			}

		}
	}
}

//优化冒泡外侧循环:
/*若原数组有序。例如:1,3,5,7,6;我们还按照原来的方法还是需要跑(N-1)次,浪费时间。因此我们加入了标志位,记录是否进行交换,
先将标志位flag至0;再将标志位在循环中至1;若进入循环标指位改变;在跑完一趟冒泡以后判断标志位,若标志位是0,说明没进行交换操作,
则直接弹出。*/

void BubbleSorter(int a[], int length)
{
	for (int i = 0; i < length - 1; i++)
	{
		int flag = 0;//加入flag标记
		for (int j = 1; j < length - 1 - i; j++)
		{
			if (a[j] > a[j + 1]) 
			{
				    int temp;
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                
                flag=1;//发生了交换,不是有序的。
			}
		}
		if (flag==0)//没发生交换,已经是有序,直接跳出。
			break;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值