16. december 2003 - 21:35Der er
12 kommentarer og 1 løsning
Selectionsort algoritme
Hey Eksperter! Jeg har lavet følgende selectionsort algoritme, som skal sorterer et array (randnumArr). Problemet er at den kun sorterer nogle af tallene... Dvs. f.eks. de første 8805 af talene ligger sorteret som de skal (skriver dem ud til en fil), men resten ligger random ud af f.eks. 10000 tal...
i = 0; t = i+1; long int min, p; Selectionsort_begin: min = randnumArr[i]; while (t != arraymax) { if (randnumArr[t] < min) { min = randnumArr[t]; p = t; } t++; } if (min != randnumArr[i]) { randnumArr[p] = randnumArr[i]; randnumArr[i] = min; i++; t = i+1; goto Selectionsort_begin; }
Det er jo nok fordi den er forkert. Du gentager kun sorteringen hvsi du laver en ombytning. Kommer du til et element, der faktisk og tilfældigvis står på sin rette plads, så stopper du.
Lav en almindelig for løkke yderst - du ved jo hvor mange gange du skal igennem (og glem alt om goto)
long int min, i, t, p, tmpVar; for (i=0; i<(t-1); i++) { min = i; for (p=(i+1); p<t; p++) { if(randnumArr[p] < randnumArr[min]) { min = p; } tmpVar = randnumArr[min]; randnumArr[min] = randnumArr[i]; randnumArr[i] = tmpVar; } }
nu sorterer den imidlertid ikke nogle enkelte af talene i starten af filen, ellers ser resten ok ud... hvis jeg kører 10 tal er der ingen fejl, men med 10000 tal er der omkring 5-10 fejl, såvidt jeg kan se...
hvis man f.eks. sorterer 100 forskellige tal, får man følgende resultat: 9343835 18503114 62163302 67315725 75400005 174240225 35074943 187371488 226162995 232531715 275528542 349041538 ...herfra er tallene sorteret korrekt
det er skummelt, det er åbenbart forskelligt hvornår den gør det.. har prøvet med 100 tal, der laver den fejl, prøvede med 10000 der gik det godt nok...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.