Mullsortimine: erinevus redaktsioonide vahel

Eemaldatud sisu Lisatud sisu
41. rida:
Algoritm lõpetab töö, kuna sellel läbimisel ei tehtud ühtegi vahetust, mis tähendab, et loend on sorditud.
 
==Implementatsioonid==
== Implementatsioon ==
===Lahendus pseudokoodisPseudokood===
Algoritmi võib esitada kujul:
<code>
'''procedure''' bubbleSort( A ''':''' list of sortable items ) '''defined as:'''
'''do'''
swapped := false
58. rida:
</code>
 
===Alternatiivsed=Jõudluse lahendusedparandus====
Mullimeetodi jõudlust saab parandada järgmiselpannes viisil.tähele, Pärastet igapärast igat läbimist jõuab suurimvõrreldud elementelementidest suurim oma lõplikule kohale loendi lõpuslõpuosas. Loendi lõppu jõudnud elemendid on sorteeritud ja (läbitudneid osa)enam läbima ei pea. Olgu meil loend suurusega ''n'', siis ''n''-is element on oma lõplikul positsioonil pärast esimest läbimist. Seega jääb sorteerida ''n - 1'' elementi. Pärast teist läbimist on ''n - 1''-ne element oma lõplikul positsioonil ja nii edasi. Iga läbimine võib olla ühe sammu võrra lühem, kui eelmine, selle asemel, et igal läbimisel võrrelda viimaseid elemente, mis on juba oma õigetel positsioonidel ning vahetust niikuinii ei toimu.
Näidislahendus C's:
 
<source lang="c">
void bubbleSort(int numbers[], int array_size)
{
int i, j, temp;
 
for (i = (array_size - 1); i > 0; i--)
{
for (j = 1; j <= i; j++)
{
if (numbers[j-1] > numbers[j])
{
temp = numbers[j-1];
numbers[j-1] = numbers[j];
numbers[j] = temp;
}
}
}
</source>
 
===Väike jõudluse parandus===
 
Mullimeetodi jõudlust saab parandada järgmisel viisil. Pärast iga läbimist jõuab suurim element oma kohale loendi lõpus (läbitud osa). Olgu meil loend suurusega ''n'', siis ''n''-is element on oma lõplikul positsioonil pärast esimest läbimist. Seega jääb sorteerida ''n - 1'' elementi. Pärast teist läbimist on ''n - 1''-ne element oma lõplikul positsioonil ja nii edasi. Iga läbimine võib olla ühe sammu võrra lühem, kui eelmine, selle asemel, et igal läbimisel võrrelda viimaseid elemente, mis on juba oma õigetel positsioonidel ning vahetust niikuinii ei toimu.
 
Võimalik saavutada järgnevalt (pseudokood):
<code>
'''procedure''' bubbleSort( A ''':''' list of sortable items ) '''defined as:'''
 
'''procedure''' bubbleSort( A ''':''' list of sortable items ) '''defined as:'''
n := length( A )
'''do'''
102. rida ⟶ 76. rida:
'''end procedure'''
</code>
Selle asemel, et teha <math>n \cdot (n-1)</math> võrdlust, tehakse maksimaalselt <math>(n-1) + (n-2) + \cdots + 1 = \frac{n(n-1)}{2}</math> võrdlust. Täitmisaeg on ikka <math>O(n^2)</math>, kuid halvimal juhul (sisendandmed on tagurpidikahanevas sorteeritudjärjestuses) on mullimeetod selle uuendusegatäiendusega kaks korda kiirem, kui ilma selleta.
 
===C===
Näidislahendus [[C (programmeerimiskeel)|C]]-s:
<source lang="c">
void bubbleSort(int numbers[], int array_sizenumbers_size) {
int in, j, tempi;
for (in = (array_sizenumbers_size - 1); in > 0; in--) {
for (ji = 1; ji <= in; ji++) {
temp int left = numbers[ji - 1];
numbers[j-1] int right = numbers[ji];
if (left > right) {
if ( numbers[ji - 1] >= numbers[j])right;
numbers[ji] = templeft;
}
{ }
{}
 
int numbers[] = { 8, 1, 5, 2, 4 };
bubbleSort(numbers, 5);
</source>
 
==Praktiline kasutus==