数据结构与算法分析——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"); }