Avatar billede superraider Nybegynder
06. marts 2005 - 17:14 Der er 5 kommentarer og
1 løsning

array sortering

Hvis man har en array,

text[1] = '99'
text[2] = '199'
text[3] = '9'

Er det så muligt at få den til at sortere efter indhold, så den skriver dem ud med en lykke, i rækkefølgen 9  99  199
Avatar billede baitianlong Nybegynder
06. marts 2005 - 17:52 #1
Her er en quicksort algoritme fra nettet:

<SCRIPT LANGUAGE="JavaScript">
function Quicksort(vec, loBound, hiBound) {
    var pivot, loSwap, hiSwap, temp;
    if (hiBound - loBound == 1) {
        if (vec[loBound] > vec[hiBound]) {
            temp = vec[loBound];
            vec[loBound] = vec[hiBound];
            vec[hiBound] = temp;
        }
        return;
    }
    pivot = vec[parseInt((loBound + hiBound) / 2)];
    vec[parseInt((loBound + hiBound) / 2)] = vec[loBound];
    vec[loBound] = pivot;
    loSwap = loBound + 1;
    hiSwap = hiBound;
    do {
        while (loSwap <= hiSwap && vec[loSwap] <= pivot)
            loSwap++;
        while (vec[hiSwap] > pivot)
            hiSwap--;
        if (loSwap < hiSwap) {
            temp = vec[loSwap];
            vec[loSwap] = vec[hiSwap];
            vec[hiSwap] = temp;
        }
    } while (loSwap < hiSwap);
    vec[loBound] = vec[hiSwap];
    vec[hiSwap] = pivot;
    if (loBound < hiSwap - 1)
        Quicksort(vec, loBound, hiSwap - 1);
    if (hiSwap + 1 < hiBound)
        Quicksort(vec, hiSwap + 1, hiBound);
}


function PrintArray(vec,lo,hi) {
    var i;
    for (i = lo; i <= hi; i++)
        document.write(vec[i] + "<BR>");
}


var text = [];
text[0] = 99;
text[1] = 199;
text[2] = 9;

Quicksort(text,0,text.length-1);
PrintArray(text,0,text.length-1);

</SCRIPT>

Bemærk at hvis det er tal, du vil sætte ind og sortere skal du ikke have ' ' omkring værdien. Så bliver det til en streng, og vil blive sorteret anderledes.
Avatar billede superraider Nybegynder
06. marts 2005 - 18:10 #2
skal der virkelig så meget til at sortere et array: P

men ser lige om det virker
Avatar billede superraider Nybegynder
06. marts 2005 - 18:26 #3
tja, det virker ikke helt, fordi jeg ikke formulerde spørgsmålet helt rigtig, og jeg kan ikke lige lave det om til det rigtige.

function Maale(id, map, inst, note, xkoor, ykoor, sted){
    this.ID = id;
    this.Map = map;
    this.Inst = inst;
    this.Note = note;
    this.Xkoor = xkoor;
    this.Ykoor = ykoor;
    this.Sted = sted
}

Maaler[0] = new Maale(1055, 'dx4', '20-02-04', 'Er placeret i køkkenet', '200', '400', 'Inde');
Maaler[1] = new Maale(1500, 'dx5', '20-01-04', 'Under Affaldsspand', '200', '400', 'Ude');


hvor den skal sortere efter ID i maaler  maaler.ID
Avatar billede superraider Nybegynder
06. marts 2005 - 19:33 #4
har fået det il at virke
Avatar billede roenving Novice
07. marts 2005 - 12:24 #5
Næh, der skal kun een linje til at sortere et array i javascript, jeg har på et tidligere tidspunkt testet den indbyggede sort-funktion i javascript op mod quicksort og bubblesort-algoritmer, og har fundet, at den indbyggede er hurtigere med en faktor 10000 overfor quicksort og 20000 overfor bubblesort ...

Grundlæggende sorteres et array på denne måde:

var text = ['99','199','9'];

text = text.sort();

alert(text);

-- men som du vil opdage, så vil det være en tekst-sortering, så rækkefølgen vil være 199;9;99 ...

-- men så er der mulighed for at angive sin egen sorterings-algoritme ved at angive en funktion, som bruges i sorteringen, som parameter til .sort(), så prøv følgende:

<script type="text/javascript">
var text = ['99','199','9'];

text = text.sort();

alert(text);

function minSort(b1,b2){
  return (+b1>+b2)?1:(+b2>+b1)?-1:0;
}

text = text.sort(minSort);

alert(text);

</script>
Avatar billede roenving Novice
07. marts 2005 - 12:27 #6
-- og PS:

-- hvis dit objekt ser ud som i eksemplet skal din minSort se således ud:

function minSort(b1,b2){
  return (b1.ID>b2.ID)?1:(b2.ID>b1.ID)?-1:0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester