冒泡排序

冒泡排序

冒泡排序的思想是通过相邻两位的数值比较,将最大(最小)的数据放在末尾。这样通过不断地两两比较,每次最大(最小)都会放在末尾,即能得到由小到大(由大到小)的排序。
n个数字排序n-1回,每回要进行n-1次比较。
此处的下标tag是为了,如果随机的数据恰好有一部分是按顺序排列的,那么在进行排序过程到此处的时候,就可以直接跳出循环,这样的操作减少了时间复杂度。

void Bubblesort(int* br, int n)
{
	int tmp = 0;
	for (int i = 1; i < n; ++i)
	{
		bool tag = true;
		for (int j = 0; j < n-i; ++j)
		{
			
			if (br[j] > br[j + 1])
			{ 
				tag = false;
				Swap_Int(&br[j], &br[j + 1]);
			}
		}
		if (tag)break;
	}
}

关于随机函数不重复的方法
FindValue函数用来查询数组里的数据与val是否重复,若重复,返回其下标,若没有,则返回-1;然后在初始化函数中,通过tmp来调用Findvalue,若返回的值是-1则将其赋给数组。
注意此处++i不能用在for语句()内,若这样处理,会让有些地方依旧是0的状态。

int FindValue(int *br,int n,int val)
{
	int pos = -1;
	for (int i = 0; i < n; ++i)
	{
		if (br[i] == val)
		{
			pos = i;
			break;
		}
	}
	return pos;
}
void Init_Ar(int *br,int n)
{
	int tmp = 0;
	for (int i = 0; i < n; )
	{
		tmp = rand() % RANDSIZE + 1;
		if (FindValue(br, i, tmp) == -1)
		{
			br[i] = tmp;
			++i;
		}

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值