指针、数组简单练习题1

1、100个随机数进行冒泡排序

void Swap_Int(int* x, int* y)
{
	int tmp = *y;
	*y = *x;
	*x = tmp;
}

void BubbleSort(int* ar, int n)
{
	assert(ar != nullptr && n > 1);
	for (int i = 0; i < n - 1; ++i)
	{
		bool tag = true;
		for (int j = 0; j < n - 1 - i; ++j)
		{
			if (ar[j] > ar[j + 1])
			{
				Swap_Int(&ar[j], &ar[j + 1]);
				tag = false;
			}
		}
		if (tag)
		{
			break;
		}
	}
}

2、输入100个不相等随机数(临时数组标记)

void Output(int ar[100], int n)
{
	for (int i = 0; i < 100; ++i)
	{
		printf("%-5d", ar[i]);
		if ((i + 1) % 10 == 0)
		{
			printf("\n");
		}
	}
}

void Init_Ar(int* ar, int n)
{
	int i = 0;
	int tmp = 0;
	int table[101] = { 0 };

	while (i < n)
	{
		tmp = rand() % 100 + 1;
		if (0 == table[tmp])
		{
			table[tmp] = 1;
			ar[i] = tmp;
			++i;
		}
	}
}

int main()
{
	const int n = 100;
	int ar[n] = { 0 };

	Init_Ar(ar, n);
	Output(ar, n);

	return 0;
}

在函数Init_Ar中,新建一个比目标数组的元素个数多一个的临时数组,初始化全为0。开始赋值时,先在临时数组中查找对应位置是否为0(0 == table[tmp]),如果为0,则把此数据赋值进目标数组,同时临时数组对应位置+1,表示此数据已经使用过了。
如果不为0,则表示目标数组中已经有这个数据了,需要从新输入一个随机数。

3、输入100个不相等的随机数(挨个查找)

void Output(int ar[100], int n)
{
	for (int i = 0; i < 100; ++i)
	{
		printf("%-5d", ar[i]);
		if ((i + 1) % 10 == 0)
		{
			printf("\n");
		}
	}
}

int FindValue(int *ar, int n, int tmp)
{
	int i = n-1;
	while (i >= 0 && ar[i] != tmp)
	{
		--i;
	}
	return i;
}

void Init_Ar(int ar[100], int n)
{
	int i = 0;
	while (i < n)
	{
		int tmp = rand() % n + 1;
		int pos = FindValue(ar, i, tmp);
		if (-1 == pos)
		{
			ar[i] = tmp;
			++i;
		}
	}
}

int main()
{
	const int n = 100;
	int ar[n] = {};

	Init_Ar(ar, n);
	Output(ar, n);

	return 0;
}

输入一个随机数,然后让随机数与目标数组中已有的数据进行比较,如果有相同的数据,则重新输入;如果没有,则把这个数输入到目标数组中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值