请大佬解疑,我之前也一直这么使用的,但从昨天开始,只要使用随机生成的函数,就会出现这个错误,导致,结果随机生成,偶尔能工运行出来,大多数时候运行报错。
全部代码如下:
#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;
}