pc
This commit is contained in:
parent
d2b2c24a9e
commit
b6150ab95c
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,5 +1,6 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"random_graph.h": "c"
|
||||
"random_graph.h": "c",
|
||||
"random_groups.h": "c"
|
||||
}
|
||||
}
|
501
example1.txt
Normal file
501
example1.txt
Normal file
@ -0,0 +1,501 @@
|
||||
Generated graph edges:
|
||||
Edge 0 -> 2
|
||||
Edge 0 -> 3
|
||||
Edge 0 -> 7
|
||||
Edge 0 -> 11
|
||||
Edge 0 -> 16
|
||||
Edge 0 -> 17
|
||||
Edge 0 -> 25
|
||||
Edge 0 -> 28
|
||||
Edge 0 -> 29
|
||||
Edge 0 -> 30
|
||||
Edge 0 -> 32
|
||||
Edge 0 -> 33
|
||||
Edge 0 -> 34
|
||||
Edge 0 -> 37
|
||||
Edge 0 -> 42
|
||||
Edge 0 -> 43
|
||||
Edge 0 -> 52
|
||||
Edge 0 -> 59
|
||||
Edge 1 -> 5
|
||||
Edge 1 -> 6
|
||||
Edge 1 -> 11
|
||||
Edge 1 -> 13
|
||||
Edge 1 -> 18
|
||||
Edge 1 -> 20
|
||||
Edge 1 -> 23
|
||||
Edge 1 -> 29
|
||||
Edge 1 -> 35
|
||||
Edge 1 -> 36
|
||||
Edge 1 -> 45
|
||||
Edge 1 -> 53
|
||||
Edge 1 -> 54
|
||||
Edge 1 -> 57
|
||||
Edge 1 -> 58
|
||||
Edge 1 -> 59
|
||||
Edge 2 -> 3
|
||||
Edge 2 -> 8
|
||||
Edge 2 -> 11
|
||||
Edge 2 -> 13
|
||||
Edge 2 -> 16
|
||||
Edge 2 -> 26
|
||||
Edge 2 -> 27
|
||||
Edge 2 -> 29
|
||||
Edge 2 -> 30
|
||||
Edge 2 -> 31
|
||||
Edge 2 -> 32
|
||||
Edge 2 -> 36
|
||||
Edge 2 -> 41
|
||||
Edge 2 -> 43
|
||||
Edge 2 -> 45
|
||||
Edge 2 -> 46
|
||||
Edge 2 -> 48
|
||||
Edge 2 -> 50
|
||||
Edge 2 -> 52
|
||||
Edge 3 -> 6
|
||||
Edge 3 -> 18
|
||||
Edge 3 -> 19
|
||||
Edge 3 -> 21
|
||||
Edge 3 -> 23
|
||||
Edge 3 -> 25
|
||||
Edge 3 -> 28
|
||||
Edge 3 -> 38
|
||||
Edge 3 -> 39
|
||||
Edge 3 -> 41
|
||||
Edge 3 -> 42
|
||||
Edge 3 -> 43
|
||||
Edge 3 -> 54
|
||||
Edge 3 -> 57
|
||||
Edge 4 -> 5
|
||||
Edge 4 -> 7
|
||||
Edge 4 -> 8
|
||||
Edge 4 -> 12
|
||||
Edge 4 -> 13
|
||||
Edge 4 -> 14
|
||||
Edge 4 -> 16
|
||||
Edge 4 -> 17
|
||||
Edge 4 -> 21
|
||||
Edge 4 -> 25
|
||||
Edge 4 -> 30
|
||||
Edge 4 -> 33
|
||||
Edge 4 -> 35
|
||||
Edge 4 -> 42
|
||||
Edge 4 -> 43
|
||||
Edge 4 -> 45
|
||||
Edge 4 -> 48
|
||||
Edge 4 -> 51
|
||||
Edge 4 -> 54
|
||||
Edge 4 -> 59
|
||||
Edge 5 -> 10
|
||||
Edge 5 -> 12
|
||||
Edge 5 -> 13
|
||||
Edge 5 -> 16
|
||||
Edge 5 -> 17
|
||||
Edge 5 -> 30
|
||||
Edge 5 -> 36
|
||||
Edge 5 -> 43
|
||||
Edge 5 -> 47
|
||||
Edge 5 -> 48
|
||||
Edge 5 -> 49
|
||||
Edge 5 -> 51
|
||||
Edge 5 -> 54
|
||||
Edge 5 -> 59
|
||||
Edge 6 -> 7
|
||||
Edge 6 -> 8
|
||||
Edge 6 -> 9
|
||||
Edge 6 -> 11
|
||||
Edge 6 -> 14
|
||||
Edge 6 -> 17
|
||||
Edge 6 -> 20
|
||||
Edge 6 -> 21
|
||||
Edge 6 -> 34
|
||||
Edge 6 -> 35
|
||||
Edge 6 -> 37
|
||||
Edge 6 -> 41
|
||||
Edge 6 -> 51
|
||||
Edge 6 -> 54
|
||||
Edge 6 -> 56
|
||||
Edge 6 -> 57
|
||||
Edge 6 -> 59
|
||||
Edge 7 -> 9
|
||||
Edge 7 -> 13
|
||||
Edge 7 -> 14
|
||||
Edge 7 -> 16
|
||||
Edge 7 -> 30
|
||||
Edge 7 -> 35
|
||||
Edge 7 -> 39
|
||||
Edge 7 -> 40
|
||||
Edge 7 -> 43
|
||||
Edge 7 -> 46
|
||||
Edge 7 -> 47
|
||||
Edge 7 -> 48
|
||||
Edge 7 -> 49
|
||||
Edge 8 -> 9
|
||||
Edge 8 -> 10
|
||||
Edge 8 -> 17
|
||||
Edge 8 -> 20
|
||||
Edge 8 -> 24
|
||||
Edge 8 -> 27
|
||||
Edge 8 -> 30
|
||||
Edge 8 -> 32
|
||||
Edge 8 -> 33
|
||||
Edge 8 -> 34
|
||||
Edge 8 -> 37
|
||||
Edge 8 -> 40
|
||||
Edge 8 -> 42
|
||||
Edge 8 -> 43
|
||||
Edge 8 -> 45
|
||||
Edge 8 -> 49
|
||||
Edge 8 -> 52
|
||||
Edge 8 -> 57
|
||||
Edge 8 -> 58
|
||||
Edge 9 -> 10
|
||||
Edge 9 -> 11
|
||||
Edge 9 -> 16
|
||||
Edge 9 -> 20
|
||||
Edge 9 -> 22
|
||||
Edge 9 -> 23
|
||||
Edge 9 -> 24
|
||||
Edge 9 -> 31
|
||||
Edge 9 -> 34
|
||||
Edge 9 -> 35
|
||||
Edge 9 -> 38
|
||||
Edge 9 -> 40
|
||||
Edge 9 -> 41
|
||||
Edge 9 -> 44
|
||||
Edge 9 -> 48
|
||||
Edge 9 -> 49
|
||||
Edge 9 -> 52
|
||||
Edge 10 -> 16
|
||||
Edge 10 -> 19
|
||||
Edge 10 -> 22
|
||||
Edge 10 -> 23
|
||||
Edge 10 -> 25
|
||||
Edge 10 -> 28
|
||||
Edge 10 -> 30
|
||||
Edge 10 -> 32
|
||||
Edge 10 -> 41
|
||||
Edge 10 -> 43
|
||||
Edge 10 -> 46
|
||||
Edge 10 -> 50
|
||||
Edge 10 -> 51
|
||||
Edge 10 -> 52
|
||||
Edge 10 -> 57
|
||||
Edge 11 -> 16
|
||||
Edge 11 -> 17
|
||||
Edge 11 -> 18
|
||||
Edge 11 -> 20
|
||||
Edge 11 -> 25
|
||||
Edge 11 -> 29
|
||||
Edge 11 -> 33
|
||||
Edge 11 -> 37
|
||||
Edge 11 -> 42
|
||||
Edge 11 -> 47
|
||||
Edge 11 -> 48
|
||||
Edge 12 -> 13
|
||||
Edge 12 -> 18
|
||||
Edge 12 -> 19
|
||||
Edge 12 -> 21
|
||||
Edge 12 -> 27
|
||||
Edge 12 -> 31
|
||||
Edge 12 -> 32
|
||||
Edge 12 -> 33
|
||||
Edge 12 -> 35
|
||||
Edge 12 -> 44
|
||||
Edge 12 -> 46
|
||||
Edge 12 -> 49
|
||||
Edge 12 -> 53
|
||||
Edge 12 -> 58
|
||||
Edge 12 -> 59
|
||||
Edge 13 -> 19
|
||||
Edge 13 -> 32
|
||||
Edge 13 -> 33
|
||||
Edge 13 -> 43
|
||||
Edge 13 -> 45
|
||||
Edge 13 -> 49
|
||||
Edge 13 -> 50
|
||||
Edge 13 -> 55
|
||||
Edge 14 -> 17
|
||||
Edge 14 -> 18
|
||||
Edge 14 -> 19
|
||||
Edge 14 -> 20
|
||||
Edge 14 -> 27
|
||||
Edge 14 -> 28
|
||||
Edge 14 -> 34
|
||||
Edge 14 -> 35
|
||||
Edge 14 -> 38
|
||||
Edge 14 -> 43
|
||||
Edge 14 -> 46
|
||||
Edge 15 -> 20
|
||||
Edge 15 -> 25
|
||||
Edge 15 -> 28
|
||||
Edge 15 -> 29
|
||||
Edge 15 -> 31
|
||||
Edge 15 -> 37
|
||||
Edge 15 -> 38
|
||||
Edge 15 -> 40
|
||||
Edge 15 -> 41
|
||||
Edge 15 -> 47
|
||||
Edge 15 -> 50
|
||||
Edge 15 -> 53
|
||||
Edge 16 -> 26
|
||||
Edge 16 -> 31
|
||||
Edge 16 -> 33
|
||||
Edge 16 -> 38
|
||||
Edge 16 -> 39
|
||||
Edge 16 -> 42
|
||||
Edge 16 -> 44
|
||||
Edge 16 -> 47
|
||||
Edge 16 -> 48
|
||||
Edge 16 -> 50
|
||||
Edge 16 -> 51
|
||||
Edge 16 -> 57
|
||||
Edge 17 -> 18
|
||||
Edge 17 -> 22
|
||||
Edge 17 -> 28
|
||||
Edge 17 -> 29
|
||||
Edge 17 -> 36
|
||||
Edge 17 -> 39
|
||||
Edge 17 -> 40
|
||||
Edge 17 -> 44
|
||||
Edge 17 -> 46
|
||||
Edge 17 -> 48
|
||||
Edge 17 -> 49
|
||||
Edge 17 -> 55
|
||||
Edge 17 -> 56
|
||||
Edge 18 -> 20
|
||||
Edge 18 -> 31
|
||||
Edge 18 -> 33
|
||||
Edge 18 -> 36
|
||||
Edge 18 -> 37
|
||||
Edge 18 -> 38
|
||||
Edge 18 -> 39
|
||||
Edge 18 -> 47
|
||||
Edge 18 -> 48
|
||||
Edge 18 -> 58
|
||||
Edge 19 -> 21
|
||||
Edge 19 -> 22
|
||||
Edge 19 -> 26
|
||||
Edge 19 -> 28
|
||||
Edge 19 -> 33
|
||||
Edge 19 -> 35
|
||||
Edge 19 -> 36
|
||||
Edge 19 -> 42
|
||||
Edge 19 -> 43
|
||||
Edge 19 -> 44
|
||||
Edge 19 -> 47
|
||||
Edge 19 -> 53
|
||||
Edge 19 -> 54
|
||||
Edge 20 -> 23
|
||||
Edge 20 -> 25
|
||||
Edge 20 -> 27
|
||||
Edge 20 -> 32
|
||||
Edge 20 -> 35
|
||||
Edge 20 -> 38
|
||||
Edge 20 -> 40
|
||||
Edge 20 -> 44
|
||||
Edge 20 -> 51
|
||||
Edge 20 -> 58
|
||||
Edge 21 -> 25
|
||||
Edge 21 -> 30
|
||||
Edge 21 -> 33
|
||||
Edge 21 -> 38
|
||||
Edge 21 -> 39
|
||||
Edge 21 -> 51
|
||||
Edge 21 -> 52
|
||||
Edge 21 -> 55
|
||||
Edge 21 -> 56
|
||||
Edge 21 -> 57
|
||||
Edge 21 -> 58
|
||||
Edge 22 -> 50
|
||||
Edge 22 -> 51
|
||||
Edge 22 -> 54
|
||||
Edge 23 -> 25
|
||||
Edge 23 -> 27
|
||||
Edge 23 -> 34
|
||||
Edge 23 -> 36
|
||||
Edge 23 -> 47
|
||||
Edge 23 -> 48
|
||||
Edge 23 -> 51
|
||||
Edge 23 -> 54
|
||||
Edge 23 -> 55
|
||||
Edge 23 -> 56
|
||||
Edge 23 -> 59
|
||||
Edge 24 -> 26
|
||||
Edge 24 -> 27
|
||||
Edge 24 -> 32
|
||||
Edge 24 -> 33
|
||||
Edge 24 -> 41
|
||||
Edge 24 -> 45
|
||||
Edge 24 -> 47
|
||||
Edge 24 -> 48
|
||||
Edge 24 -> 49
|
||||
Edge 24 -> 52
|
||||
Edge 24 -> 53
|
||||
Edge 24 -> 58
|
||||
Edge 25 -> 26
|
||||
Edge 25 -> 31
|
||||
Edge 25 -> 34
|
||||
Edge 25 -> 36
|
||||
Edge 25 -> 37
|
||||
Edge 25 -> 39
|
||||
Edge 25 -> 48
|
||||
Edge 25 -> 53
|
||||
Edge 25 -> 54
|
||||
Edge 25 -> 55
|
||||
Edge 25 -> 57
|
||||
Edge 26 -> 33
|
||||
Edge 26 -> 39
|
||||
Edge 26 -> 41
|
||||
Edge 26 -> 43
|
||||
Edge 26 -> 47
|
||||
Edge 26 -> 50
|
||||
Edge 27 -> 29
|
||||
Edge 27 -> 30
|
||||
Edge 27 -> 31
|
||||
Edge 27 -> 32
|
||||
Edge 27 -> 38
|
||||
Edge 27 -> 39
|
||||
Edge 27 -> 43
|
||||
Edge 27 -> 44
|
||||
Edge 27 -> 46
|
||||
Edge 27 -> 51
|
||||
Edge 27 -> 55
|
||||
Edge 27 -> 59
|
||||
Edge 28 -> 29
|
||||
Edge 28 -> 30
|
||||
Edge 28 -> 31
|
||||
Edge 28 -> 36
|
||||
Edge 28 -> 44
|
||||
Edge 28 -> 45
|
||||
Edge 28 -> 58
|
||||
Edge 29 -> 32
|
||||
Edge 29 -> 34
|
||||
Edge 29 -> 41
|
||||
Edge 29 -> 42
|
||||
Edge 29 -> 45
|
||||
Edge 29 -> 47
|
||||
Edge 29 -> 51
|
||||
Edge 29 -> 52
|
||||
Edge 29 -> 59
|
||||
Edge 30 -> 31
|
||||
Edge 30 -> 38
|
||||
Edge 30 -> 43
|
||||
Edge 30 -> 44
|
||||
Edge 30 -> 52
|
||||
Edge 30 -> 57
|
||||
Edge 31 -> 35
|
||||
Edge 31 -> 39
|
||||
Edge 31 -> 44
|
||||
Edge 31 -> 45
|
||||
Edge 31 -> 51
|
||||
Edge 31 -> 58
|
||||
Edge 31 -> 59
|
||||
Edge 32 -> 34
|
||||
Edge 32 -> 35
|
||||
Edge 32 -> 36
|
||||
Edge 32 -> 42
|
||||
Edge 32 -> 52
|
||||
Edge 32 -> 55
|
||||
Edge 33 -> 34
|
||||
Edge 33 -> 35
|
||||
Edge 33 -> 37
|
||||
Edge 33 -> 41
|
||||
Edge 33 -> 53
|
||||
Edge 33 -> 55
|
||||
Edge 34 -> 35
|
||||
Edge 34 -> 36
|
||||
Edge 34 -> 37
|
||||
Edge 34 -> 38
|
||||
Edge 34 -> 43
|
||||
Edge 34 -> 59
|
||||
Edge 35 -> 36
|
||||
Edge 35 -> 37
|
||||
Edge 35 -> 39
|
||||
Edge 35 -> 41
|
||||
Edge 35 -> 47
|
||||
Edge 35 -> 51
|
||||
Edge 35 -> 52
|
||||
Edge 35 -> 56
|
||||
Edge 36 -> 39
|
||||
Edge 36 -> 43
|
||||
Edge 36 -> 45
|
||||
Edge 36 -> 47
|
||||
Edge 36 -> 52
|
||||
Edge 36 -> 53
|
||||
Edge 36 -> 55
|
||||
Edge 36 -> 59
|
||||
Edge 37 -> 39
|
||||
Edge 37 -> 44
|
||||
Edge 37 -> 48
|
||||
Edge 37 -> 51
|
||||
Edge 37 -> 56
|
||||
Edge 37 -> 57
|
||||
Edge 38 -> 40
|
||||
Edge 38 -> 43
|
||||
Edge 38 -> 46
|
||||
Edge 38 -> 56
|
||||
Edge 38 -> 58
|
||||
Edge 39 -> 40
|
||||
Edge 39 -> 46
|
||||
Edge 39 -> 49
|
||||
Edge 39 -> 51
|
||||
Edge 39 -> 52
|
||||
Edge 39 -> 55
|
||||
Edge 39 -> 57
|
||||
Edge 40 -> 47
|
||||
Edge 40 -> 48
|
||||
Edge 40 -> 52
|
||||
Edge 40 -> 54
|
||||
Edge 41 -> 50
|
||||
Edge 41 -> 52
|
||||
Edge 41 -> 57
|
||||
Edge 41 -> 58
|
||||
Edge 42 -> 46
|
||||
Edge 42 -> 48
|
||||
Edge 42 -> 56
|
||||
Edge 42 -> 59
|
||||
Edge 43 -> 48
|
||||
Edge 43 -> 53
|
||||
Edge 43 -> 54
|
||||
Edge 43 -> 59
|
||||
Edge 44 -> 47
|
||||
Edge 44 -> 51
|
||||
Edge 44 -> 52
|
||||
Edge 44 -> 54
|
||||
Edge 44 -> 55
|
||||
Edge 45 -> 48
|
||||
Edge 45 -> 49
|
||||
Edge 45 -> 51
|
||||
Edge 45 -> 52
|
||||
Edge 45 -> 54
|
||||
Edge 45 -> 57
|
||||
Edge 45 -> 58
|
||||
Edge 46 -> 47
|
||||
Edge 46 -> 50
|
||||
Edge 46 -> 54
|
||||
Edge 46 -> 55
|
||||
Edge 47 -> 48
|
||||
Edge 47 -> 52
|
||||
Edge 47 -> 59
|
||||
Edge 48 -> 52
|
||||
Edge 48 -> 53
|
||||
Edge 48 -> 56
|
||||
Edge 48 -> 58
|
||||
Edge 49 -> 53
|
||||
Edge 49 -> 54
|
||||
Edge 49 -> 59
|
||||
Edge 50 -> 52
|
||||
Edge 50 -> 53
|
||||
Edge 50 -> 57
|
||||
Edge 50 -> 59
|
||||
Edge 51 -> 54
|
||||
Edge 51 -> 58
|
||||
Edge 52 -> 54
|
||||
Edge 52 -> 55
|
||||
Edge 52 -> 59
|
||||
Edge 54 -> 57
|
||||
Edge 54 -> 58
|
||||
Edge 56 -> 57
|
||||
Edge 56 -> 58
|
||||
Edge 57 -> 58
|
@ -12,6 +12,7 @@ typedef struct Edge {
|
||||
} Edge;
|
||||
|
||||
// Function prototypes
|
||||
int cmpInt(const void *a, const void *b);
|
||||
unsigned int uv2index(unsigned int u, unsigned int v, unsigned int n);
|
||||
unsigned int min(unsigned int u, unsigned int v);
|
||||
unsigned int max(unsigned int u, unsigned int v);
|
||||
|
16
include/random_groups.h
Normal file
16
include/random_groups.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef RANDOM_GROUPS_H
|
||||
#define RANDOM_GROUPS_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
// Struct for representing groups
|
||||
typedef struct {
|
||||
unsigned int *group; // Pointer to an array of group members
|
||||
unsigned int size; // Number of members in the group
|
||||
} Group;
|
||||
|
||||
// Function to generate random groups
|
||||
void generate_random_groups(unsigned int n, unsigned int k, Group **groups);
|
||||
|
||||
#endif // RANDOM_GROUPS_H
|
18
src/main.c
18
src/main.c
@ -1,9 +1,10 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "random_graph.h"
|
||||
#include "random_groups.h"
|
||||
|
||||
int main() {
|
||||
unsigned int n = 5000, m = 10000, seed = 0;
|
||||
unsigned int n = 20, m = 80, k = 4, seed = 5;
|
||||
Edge *edges = malloc(m * sizeof(Edge));
|
||||
if (!edges) {
|
||||
fprintf(stderr, "Error: Memory allocation of EDGE array: edges FAILED.\n");
|
||||
@ -17,6 +18,21 @@ int main() {
|
||||
printf("Edge %d -> %d\n", edges[i].src, edges[i].dest);
|
||||
}
|
||||
|
||||
|
||||
Group *groups;
|
||||
generate_random_groups(n, k, &groups);
|
||||
|
||||
// Print groups
|
||||
printf("Random groups:\n");
|
||||
for (unsigned int i = 0; i < k; i++) {
|
||||
printf("Group %u: ", i);
|
||||
for (unsigned int j = 0; j < groups[i].size; j++) {
|
||||
printf("%u ", groups[i].group[j]);
|
||||
}
|
||||
printf("\n");
|
||||
free(groups[i].group); // Free each group's array
|
||||
}
|
||||
free(groups); // Free the groups array
|
||||
free(edges);
|
||||
return 0;
|
||||
}
|
||||
|
87
src/random_groups.c
Normal file
87
src/random_groups.c
Normal file
@ -0,0 +1,87 @@
|
||||
#include "random_groups.h"
|
||||
#include "random_graph.h"
|
||||
|
||||
// Helper function to shuffle an array
|
||||
void shuffle(unsigned int *array, unsigned int size) {
|
||||
for (unsigned int i = size - 1; i > 0; i--) {
|
||||
unsigned int j = rand() % (i + 1);
|
||||
unsigned int temp = array[i];
|
||||
array[i] = array[j];
|
||||
array[j] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void generate_random_groups(unsigned int n, unsigned int k, Group **groups_out) {
|
||||
if (k > n) {
|
||||
fprintf(stderr, "Error: Number of groups (k) cannot exceed the number of vertices (n).\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Allocate memory for array N (vertices) and initialize
|
||||
unsigned int *N = (unsigned int *)malloc(n * sizeof(unsigned int));
|
||||
if (!N) {
|
||||
fprintf(stderr, "Error: Memory allocation failed for array N.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
for (unsigned int i = 0; i < n; i++) {
|
||||
N[i] = i;
|
||||
}
|
||||
|
||||
// Allocate memory for groups
|
||||
Group *groups = (Group *)malloc(k * sizeof(Group));
|
||||
if (!groups) {
|
||||
fprintf(stderr, "Error: Memory allocation failed for groups.\n");
|
||||
free(N);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
for (unsigned int i = 0; i < k; i++) {
|
||||
groups[i].group = (unsigned int *)malloc(n * sizeof(unsigned int));
|
||||
groups[i].size = 0;
|
||||
if (!groups[i].group) {
|
||||
fprintf(stderr, "Error: Memory allocation failed for group %u.\n", i);
|
||||
for (unsigned int j = 0; j < i; j++) {
|
||||
free(groups[j].group);
|
||||
}
|
||||
free(groups);
|
||||
free(N);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
// Generate a random float f in the range (0, 0.5)
|
||||
float f;
|
||||
do {
|
||||
f = (float)rand() / RAND_MAX;
|
||||
} while (f <= 0.0 || f >= 0.5);
|
||||
|
||||
unsigned int offset = (unsigned int)(f * n);
|
||||
|
||||
// Shuffle the array N
|
||||
shuffle(N, n);
|
||||
|
||||
// Distribute elements to the first part of each group
|
||||
for (unsigned int i = 0; i < k; i++) {
|
||||
groups[i].group[groups[i].size++] = N[offset + i];
|
||||
}
|
||||
|
||||
// Distribute remaining elements to groups
|
||||
for (unsigned int i = 0; i < k; i++) {
|
||||
unsigned int start = offset + k;
|
||||
unsigned int end = offset + k + (n - offset) / k - 1;
|
||||
shuffle(N + start, end - start + 1);
|
||||
|
||||
for (unsigned int j = start; j <= end; j++) {
|
||||
groups[i].group[groups[i].size++] = N[j];
|
||||
}
|
||||
}
|
||||
|
||||
// Sort each group
|
||||
for (unsigned int i = 0; i < k; i++) {
|
||||
qsort(groups[i].group, groups[i].size, sizeof(unsigned int), cmpInt);
|
||||
}
|
||||
|
||||
// Clean up
|
||||
free(N);
|
||||
*groups_out = groups;
|
||||
}
|
Loading…
Reference in New Issue
Block a user