#include <iostream>
#include <cstdlib>
#include <ctime>
一、1到n n个数字随机全排序,或者说,随机生成1到n n个不重复的数字
用空间换时间,需要空间复杂度为o(n),时间复杂度为o(n)
用一维数组顺序存储1到n这n个数字。
然后先在1到n中随机生成一个下标,输出该下标对应的值,然后将数组最后一个交换。并将此时最后一个从逻辑上删除。倒数第二个成为最后一个。
生成n次随机下标,问题解决。简单吧。
void generate_N_Random(int n)
{
int* NumPool = new int[n];
for(int i = 0; i < n; i++)
NumPool[i] = i + 1;
srand((unsigned int)time(0));
int subIndex = 0;
int currentLastIndex = n - 1;
for (int i = 0; i < n; i++)
{
subIndex = rand()%( n-i);
std::cout << NumPool[subIndex] << " ";
NumPool[subIndex] = NumPool[currentLastIndex];
currentLastIndex--;
}
endl(std::cout);
delete[] NumPool;
}