Kommentarer
Svar
Ikke bogobogosort
Slik du implementerte bogobogosort, er det faktisk raskere enn bogosort becau av noen få grunner:
- 
Etter at du har fullført k-elementer, sjekker du umiddelbart omk+1elementene er sortert. Dette betyr at hvis du tilfeldigvis blandetmelementene i rekkefølge, så vil du umiddelbart nåm.Anta for eksempel at du når fem kort og deretter mislykkes. Du stokker 5 kort og begynner på nytt ved 2. Hvis disse 5 kortene tilfeldigvis er i sortert rekkefølge, når du umiddelbart 6 så snart du setter de to første kortene i orden. 
- 
På grunn av punkt 1 er bogobogosortet ditt faktisk raskere enn bogosortet fordi det bare trenger å sortere n-1kort i stedet forn. Etter at den har sortertn-1kort, sjekker den rekkefølgen pånkort og kan mislykkes. Men hvis det mislykkes, blandes detnkort slik at det hver gang det sorterern-1-kort, har et1/nsjanse for til slutt å lykkes. Så det totale antallet kort som stokkes er i størrelsesorden(n-1) * (n-1)! * nsom forenkler til(n-1) * n!, sammenlignet med bogosort som blandern * n!kort.Jeg mener at det samme prinsippet gjelder ved hvert trinn, så tiden er enda mindre enn (n-1) * n!. Jeg er ikke sikker på nøyaktig matematikk, men når du kjører programmet ditt, ser det ut til at bogobogosort kjører omtrent samme tid som bogosort med ett færre kort. Det vil si Your_bogobogosort (n) = bogosort (n-1).
En skikkelig bogobogosort
Jeg skrev om bogobogosort-funksjonen din slik:
unsigned long bogobogosort(int *data, size_t n) { unsigned long c = 0; size_t b = 2; while (1) { if (sorted(data, b)) { if (b == n) break; b++; } else { b = 2; } c += b; shuffle(data, b); } return c; }  Hovedforskjellen her er at etter hver suksess der den øker b, blandes den på nytt for å forhindre at punkt 1 ovenfor skjer. Med denne endringen får jeg utdata som dette: 
% ./a.out 6 bogosort shuffled 1044 cards in 0.000013 seconds. bogobogosort shuffled 54464568 cards in 0.500339 seconds. Kommentarer
-  I følge beskrivelsen på Wikipedia, sjekker den første delen av bogosort for bestilt data. Hvis de første N-elementene er i orden, gjør ikke en bogosort av disse N-elementene en eneste blanding. Så hvis jeg har 0 1 2 3 4 6 5og bogobogosort at jeg går fra bogosort fra 2 til 5 elementer uten blanding, og bland deretter 6 elementer (og gå tilbake til bo gobogosorting 2).
- @pmg Hvis det er riktig definisjon av bogobogosort, viser det seg å være raskere enn bogosort (som OP ' s program viser) . Jeg ' er ikke kjent med opprinnelsen til bogobogosort, men for at den skal " løpe til varmedødet til universet " som påstått, det skal se mer ut som den typen jeg skrev.
sorties.c: In function ‘timedelta’: sorties.c:82:18: error: dereferencing pointer to incomplete type double aa = a->tv_sec + (a->tv_nsec / 1000000000.0); ^ sorties.c:82:31: error: dereferencing pointer to incomplete type double aa = a->tv_sec + (a->tv_nsec / 1000000000.0); ^ sorties.c:83:18: error: dereferencing pointer to incomplete type double bb = b->tv_sec + (b->tv_nsec / 1000000000.0); ^ ...hvilken versjon av GCC skal jeg kjøre denne i?