冒泡排序
冒泡排序的思想是通过相邻两位的数值比较,将最大(最小)的数据放在末尾。这样通过不断地两两比较,每次最大(最小)都会放在末尾,即能得到由小到大(由大到小)的排序。
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;
}
}
}