c - Shuffle a struct -
i have struct have 6 members. want shuffle struct when user hits enter key struct members randomly prints out this:
first time:
member3 - member1 member4 - member6 member5 - member2
second time:
member1 - member6 member3 - member5 member2 - member4
and on long user hits enter kyboard members shuffle.
this have far:
int main(void) { struct members[] = { { "member1", 0, 0, 0}, { "member2", 0, 0, 0}, { "member3", 0, 0, 0}, { "member4", 0, 0, 0}, { "member5", 0, 0, 0}, }; { shuffle(members, 6) }while(getch() != esc); }
edit: implementation of fisher-yates shuffle?
static int rand_int(int n) { int limit = rand_max - rand_max % n; int rnd; { rnd = rand(); }while(rnd >= limit); return rnd % n; } void shuffle(members *s, int n) { int i, j; members tmp; for(i = n - 1; > 0; i--) { j = rand_int(i + 1); tmp = s[j]; s[j] = s[i]; s[i] = tmp; printf("%s\t - %s\n", s[j], s[i]); } }
via wikipedia fisher yates shuffle:
to shuffle array of n elements (indexes 0..n-1): n − 1 downto 1 j ← random integer 0 ≤ j ≤ exchange a[j] , a[i]
the quirk you going have reassign each element of each struct during swap. easier, , more time-efficient way accomplish same thing have array of pointers swapping purposes
Comments
Post a Comment