生成随机数rand()报错0x00A326FE 处有未经处理的异常

请大佬解疑,我之前也一直这么使用的,但从昨天开始,只要使用随机生成的函数,就会出现这个错误,导致,结果随机生成,偶尔能工运行出来,大多数时候运行报错。

全部代码如下:

#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;

int Rand(const int start, const int end)
{
	srand((unsigned)time(NULL));
	return rand() % (end - start + 1) + start;
}

int Partition(int a[], int start, int end)
{
	int i = start, j = end + 1;
	int log = a[start];
	while (true)
	{
		while (a[++i] < log&&i < end);//防止运行到未定义的区域
		while (a[--j] > log);//最坏的情况下,运行到a[start]将推出循环
		if (i >= j)
		{
			break;
		}
		swap(a[i], a[j]);
	}
	a[start] = a[j];
	a[j] = log;
	return j;
}

int RandomziedPartition(int a[], int start, int end)//j数据总数的一半
{
	int log = Rand(start, end);
	swap(a[start], a[log]);
	return Partition(a,  start,  end);
}

int RandomizedSelect(int a[], int start, int end, int k)//end是数组的下标,而不是数据的数目
{
	if (start == end)
	{
		return a[start];
	}

	int i = RandomziedPartition(a,  start,  end), j = end - i + 1;//j数据总数的一半
	if (k <= j)
	{
		return RandomizedSelect(a, start,  i,  k);
	}
	else
	{
		return RandomizedSelect( a,  i + 1,  end,  k - j);//由于现在检测的是左部分,所以求的第k小的数据也应该减去总数据数目的一半
	}
}

int main(void)
{
	int a[10];
	srand((unsigned)time(NULL));
	for (int i = 0; i < 10; i++)
	{
		a[i] = rand() % 100 + 1;//生成1——100的随机数
		cout << a[i] << " ";
	}
	cout << endl;
	int k;
	cout << "请输入需要查找的第k小的数据的k:";
	cin >> k;
	cout << "该数组的第" << k << "小的数据为:" << RandomizedSelect(a, 0, 9, k) << endl;

	return 0;
}

 

查看全部
qimujun
迷途的启木菌
2020/12/05 13:45
  • c++
  • c语言
  • 点赞
  • 收藏
  • 回答
    私信

3个回复