请问各位大佬有没有比较快的将排好的数列随机打乱的算法
  • 板块学术版
  • 楼主fffngzzh
  • 当前回复10
  • 已保存回复10
  • 发布时间2021/5/9 12:54
  • 上次更新2023/11/4 23:29:47
查看原帖
请问各位大佬有没有比较快的将排好的数列随机打乱的算法
345401
fffngzzh楼主2021/5/9 12:54

一般能想到的是随机从数组中选出一个数,然后塞进另一个数组里

为了防止下一次选择同样的数,所以将这个数后面的数都往前移一格,时间复杂度 O(n2)O(n^2)

#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;
 } 

有没有更快的?请求大佬帮助(不要链表)

2021/5/9 12:54
加载中...