一般能想到的是随机从数组中选出一个数,然后塞进另一个数组里
为了防止下一次选择同样的数,所以将这个数后面的数都往前移一格,时间复杂度 O(n2)
#include<bits/stdc++.h>
using namespace std;
int l1,l2=0,a[10001],b[10001];
void dele(int id)
{
for(int i=id;i<=l1;i++)
{
a[i]=a[i+1];
}
}
int main()
{
srand(time(0));
int n,p;
cin>>n;
l1=n;
for(int i=1;i<=n;i++)
{
a[i]=i;
}
for(int i=1;i<=n;i++)
{
p=rand()%l1+1;
b[++l2]=a[p];
l1--;
dele(p);
}
for(int i=1;i<=n;i++)
{
printf("%d ",b[i]);
}
putchar(10);
return 0;
}
有没有更快的?请求大佬帮助(不要链表)