Avatar billede tzr Nybegynder
12. marts 2004 - 02:19 Der er 4 kommentarer og
1 løsning

Sortering af Arrays

Jeg har en 2-dimensionel integer array der skal soteres i første dimension i forhold til anden

fx skal:
{ {1,4,3,2},{0,0,4,2},{1,3,3,8} }

sorteres til:
{ {0,0,4,2},{1,3,3,8},{1,4,3,2} }

til sortering behøves der ikke bruges en eller anden hyperadvanceret superhurtig algoritme, BubbleSort og lignende er helt fint :)

Gav det mening ? det håber jeg :)

Mvh Kenneth
Avatar billede jakoba Nybegynder
12. marts 2004 - 02:39 #1
brug usort  (UserdefinedSORTing) http://dk.php.net/manual/en/function.usort.php

dser skal så laves en lille funktion til at se på 2 underarrays ofg beslutte hvilket er 'størst'. Det kunne fx være:

function array_compare( $a, $b ) {
    for ($i=0; $i<count($a); $i++) {
        if ( $a[$i] < $b[$i] ) return -1;
        if ( $a[$i] > $b[$i] ) return +1;
    }
    return 0;    // 0 -> de var ens hele vejen
}

// du laver så sorteringen med

usort( $dit_store_array, "array_compare" );
    // sorterer $dit_store_array efter sammenligningsfunkionen "array_compare"

mvh JakobA

PS: funktionen forudsætter at vi kan stole på at alle underarrays har samme længde.
Avatar billede jakoba Nybegynder
12. marts 2004 - 03:27 #2
Oops. sorry, det var PHP og ikke Java.

I Java ved jag faktisk ikke. relen er at hvis de opbjekter der er i det store array implementerer Comparable så vil  Array.sort( detÅarray )  dortere assrayet efter den regel du definerer i metoden  'compareTo'
  http://java.sun.com/j2se/1.3/docs/api/java/lang/Comparable.html

men jeg har ingen ide om hvordan man evt kunne inplementere en comparTo for et array og stadig få det til at virke som array med [bracket] indexering osv.

Du kommer nok til a vente på en ordentlig haj imorgen :(

mvh JakobA
Avatar billede arne_v Ekspert
12. marts 2004 - 07:59 #3
En mulighed er Arrays.sort og en Comparator.

Eksempel:

import java.util.*;

public class TwoDimSort {
    public static void main(String[] args) {
        int[][] a = { { 1, 4, 3, 2 }, { 0, 0, 4, 2 }, {    1, 3, 3, 8 } };
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                System.out.print(" " + a[i][j]);
            }
            System.out.println();
        }
        Arrays.sort(a, new Cmp());
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                System.out.print(" " + a[i][j]);
            }
            System.out.println();
        }
    }
}

class Cmp implements Comparator {
    public int compare(Object o1, Object o2) {
        int[] a1 = (int[]) o1;
        int[] a2 = (int[]) o2;
        int k = 0;
        for (;;) {
            if (k == a1.length && k == a2.length) {
                return 0;
            } else if (k == a1.length && k < a2.length) {
                return -1;
            } else if (k < a1.length && k == a2.length) {
                return 1;
            } else if (a1[k] == a2[k]) {
                k++;
            } else if (a1[k] < a2[k]) {
                return -1;
            } else if (a1[k] > a2[k]) {
                return 1;
            }
        }
    }
    public boolean equals(Object obj) {
        return false;
    }
}
Avatar billede arne_v Ekspert
12. marts 2004 - 08:00 #4
Check lige cmp - det gik lidt hurtigt.
Avatar billede tzr Nybegynder
12. marts 2004 - 11:17 #5
smukt :) takker!
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
Kurser inden for grundlæggende programmering

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