„Víxlunarröðun“: Munur á milli breytinga

Efni eytt Efni bætt við
Balu.ertl (spjall | framlög)
Inserting SVG image
m <source> -> <syntaxhighlight> (phab:T237267)
Lína 10:
== Útfærsla ==
Þetta [[C99]] [[fall (stærðfræði)|fall]] raðar [[fylki]]nu <tt>tolur</tt> af stærð <tt>staerd</tt> með víxlunarröðun, gert er ráð fyrir að búið sé að skilgreina fallið <tt>vixla</tt>, sem tekur tvö stök og gefur þeim gildi hvors annars:
<sourcesyntaxhighlight lang="c">
void vixla(int *tala1, int *tala2)
{
Lína 17:
*tala2 = timabundin_tala;
}
</syntaxhighlight>
</source>
 
Einfaldasta útgáfa víxlunarröðunar:
 
<sourcesyntaxhighlight lang="c">
void bubblesort(int tolur[], int staerd)
{
Lína 29:
vixla(&tolur[j], &tolur[j + 1]);
}
</syntaxhighlight>
</source>
 
== Víxlunarröðunin betrumbætt ==
Ef farið er yfir fylkið og ekki þarf að skipta út neinum stökum er það tryggt að ekki þarf að fara yfir það aftur þar sem það er þegar raðað, í besta tilfelli þarf þá að gera <tt>n</tt> samanburði fyrir fylki af stærð <tt>n</tt> (ef fylkið er þegar raðað), gert er ráð fyrir að búið sé að skilgreina fallið <tt>vixla</tt> eins og áður:
<sourcesyntaxhighlight lang="c">
#include <stdbool.h>
 
Lína 49:
}
}
</syntaxhighlight>
</source>
 
Eftir að búið er að fara yfir fylkið einu sinni er tryggt að stærsta stak þess er komið aftast í fylkið, þegar búið er að fara yfir það tvisvar er tryggt að tvö efstu stökin eru komin efst í það o.s.f., þar með er hægt að flýta reikniritinu með því að sleppa því að bera saman þau stök sem vitað er að eru þegar röðuð:
 
<sourcesyntaxhighlight lang="c">
void vixlunarrodun(int tolur[], int staerd)
{
Lína 66:
}
}
</syntaxhighlight>
</source>
 
að lokum er svo hægt að sameina þessar tvær aðferðir:
 
<sourcesyntaxhighlight lang="c">
#include <stdbool.h>
 
Lína 90:
}
}
</syntaxhighlight>
</source>
 
==Tilvísanir==