数据结构与算法分析——c语言描述 练习2.7
第一个算法
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define MAXN 10000000
int RandInt(int i, int j)
{
int temp;
temp = i + (1.0*rand() / RAND_MAX)*(j - i );
return temp;
}
int A[MAXN];
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
while (1)
{
int t = RandInt(1, n);
int flag = 1;
for (int j = 0; j < i; j++) {
if (A[j] == t) {
flag = 0;
break;
}
}
if (flag) {
A[i] = t;
break;
}
else
continue;
}
}
for (int i = 0; i < n; i++)
{
printf("%d ", A[i]);
}
printf("\n");
}
第二个算法
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define MAXN 10000000
int RandInt(int i, int j)
{
int temp;
temp = i + (1.0*rand() / RAND_MAX)*(j - i );
return temp;
}
int A[MAXN],used[MAXN];
int main() {
int n;
scanf("%d", &n);
memset(used, 0, sizeof(used));
for (int i = 0; i < n; i++) {
while (1)
{
int t = RandInt(1, n);
if (!used[t]) {
used[t] = 1;
A[i] = t;
break;
}
}
}
for (int i = 0; i < n; i++)
{
printf("%d ", A[i]);
}
printf("\n");
}
第三个算法
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#define MAXN 10000000
int RandInt(int i, int j)
{
int temp;
temp = i + (1.0*rand() / RAND_MAX)*(j - i );
return temp;
}
int A[MAXN];
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
A[i] = i + 1;
}
for (int i = 1; i < n; i++) {
std::swap(A[i], A[RandInt(0, i)]);
}
for (int i = 0; i < n; i++)
{
printf("%d ", A[i]);
}
printf("\n");
}