Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di daneel
    Registrato dal
    Oct 2002
    Messaggi
    229

    [JS] Ordinamento di due array

    Qual'è il metodo più efficiente con JavaScript per ordinare un array e contemporaneamente spostare i dati del secondo array nello stesso ordine in cui sono stati spostati quelli del primo?
    codice:
    vettore1=new Array(3,14,7,21);
    vettore2=new Array("c","n","g","u");
    ordina(vettore1,vettore2);
    
    function ordina(vettore1,vettore2){
    	vettore1ord=new Array();
    	vettore2ord=new Array();
    	// ...
    	// l'ordinamento viene effettuato su vettore1
    	// vettore1ord -> 3,7,14,21
    	// vettore2 viene ordinato di conseguenza
    	// vettore2ord -> "c","g","n","u"
    }

  2. #2
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao daneel,

    non saprei qual'è il metodo più efficiente... però io farei così
    codice:
    function ordina(v1,v2){
      var continua=true
      var t1,t2
      do{
        continua=false
        for(i=1;i<v1.length;i++)
          if(v1[i]<v1[i-1]){
            t1 = v1[i]
            t2 = v2[i]
            v1[i]=v1[i-1]
            v2[i]=v2[i-1]
            v1[i-1]=t1
            v2[i-1]=t2
            continua=true
          }
      }while(continua)
    }
    vettore1=new Array(3,14,7,21);
    vettore2=new Array("c","n","g","u");
    ordina(vettore1,vettore2)

  3. #3
    Utente di HTML.it L'avatar di daneel
    Registrato dal
    Oct 2002
    Messaggi
    229
    Grazie willybit.

  4. #4

    Ordinamento

    Ciao,
    forse l' ordinamento di un array è il problema più discusso nella storia dell' informatica... esistono diversi algoritmi che permettono ciò; da quello sequenziale (sicuramente il peggiore) al quick sort (uno tra i migliori)
    cmq prova a dare un 'occhiata in www.google.it e cerca

    1. bouble sort
    2. quick sort
    3. Algoritmo di Merge

    (l' ultimo dovrebbe avere la complessita computazionale + bassa)
    e valuta quello che secondo te può andare meglio...

    un esempio di bouble sort

    array ----> 15 3 5 scambiati = false

    boublesort(array)

    se array[i]>arrai[i+1] ---> scambia(); scambiati = true

    situazione---> 3 15 5

    se scambiati == true

    boublesort(array)

    se array[i]>arrai[i+1] ---> scambia(); scambiati = true

    situzione 3 5 15

    se scambiati == true

    boublesort(array)

    se array[i]>arrai[i+1] ---> scambiati = false

    situazione 3 5 15

    ARRAY ORDINATO

  5. #5
    Bè forse il bobble sort
    è proprio quello proposto
    da willybit....o no?
    Tenendo memoria temporanea
    della posizione precedente ed eseguendo
    un ciclo fino a che si realizzi
    anche un solo nuovo ordinamento.

    Ciao
    La farfalla continuerà a librarsi sui campi e la goccia di rugiada brillerà ancora sull'erba quando le piramidi saranno ormai appiattite e non esisteranno più i grattacieli
    di New York

  6. #6

    In effetti

    Si è proprio quello... non avevo voglia di leggerlo... scusa...
    Beh dai per lo meno ti ne ho indicati altri 2...

    Ciao e Grazie

  7. #7
    Utente di HTML.it L'avatar di daneel
    Registrato dal
    Oct 2002
    Messaggi
    229

    Re: Ordinamento

    Originariamente inviato da Tigre851
    Ciao,
    forse l' ordinamento di un array è il problema più discusso nella storia dell' informatica... esistono diversi algoritmi che permettono ciò; da quello sequenziale (sicuramente il peggiore) al quick sort (uno tra i migliori)
    Grazie Tigre851. Ho già riletto alcuni articoli, tra cui quello nel sito di virusbye, sugli algoritmi di ordinamento.
    Credo che la cosa migliore sia fare qualche prova in js con gli algoritmi più efficienti. Appena ho un pomeriggio libero mi diverto un po'.

  8. #8
    nosferatu_net
    Guest
    Secondo me state perdendo di vista il problema.

    Se ho inteso bene, qui parliamo di due array "fratelli", in cui ogni elemento è in relazione con il suo "omonimo" nell'altro array.
    Da qui mi pare nasca la necessità di ordinarli entrambi "in parallelo".
    Due array chiavi/valori, quindi.

    Ma perché non affrontare il problema dal verso opposto?!?
    Usiamo gli oggetti, no?

    Se si decide che la relazione tra i due array è, poniamo ad esempio, chiave/valore, possiamo farci una classe che definisca l'oggetto in questione, ad es:

    function MioOggetto(chiave, valore)
    {
    this.chiave = chiave;
    this.valore = valore;
    }

    ...e montare un solo array di istanze di MioOggetto, e non due array:

    var mioArray = new Array(
    new MioOggetto("chiave1", "valore1"),
    new MioOggetto("chiave2", "valore2"),
    ...
    );

    Facendo così possiamo utilizzare quella comodissima chiamata al metodo Array.sort passandogli in parametro un'istanza di Function, cioè una funzione di ordinamento, ad esempio:

    mioArray.sort(function(a,b){return a.chiave < b.chiave;});

    ...ed evitare di mettersi a testare questo o quell'ordinamento.
    Ci hanno già pensato i programmatori del parser JavaScript del browser che state usando a scervellarsi alla ricerca del bubble più performante.

    "Avoid reinventing the wheel" strillano i manuali di programmazione ad oggetti.
    Il metodo già c'è! Secondo me basta descrivere meglio i dati.

  9. #9
    Direi che è perfetto!
    Ma vorrei aggiungere:
    a meno che non hai bisogno di velocizzare
    in modo specifico, vuoi mettere
    lo sfizio di farlo tu il codice?
    Io la prima volta che ordinai un array
    lo feci per conto mio...dopo molto tempo
    ho scoperto che avevo usato il bubble sort
    e che esisteva da tempo( e come me tantissimi altri
    credo)...
    Penso sempre che sia meglio ,finchè si può,
    farsi il codice in proprio...è l'unico
    modo di imparare qualcosa...quindi applicare
    le semplificazioni del caso più avanti...
    Molto più riflessiva la cosa e soprattutto
    molto più gratificante,almeno fino a quando,ripeto,
    non sei costretto a cambiare(se mai lo fossi)...

    Ma è una divagazione ovviamente,un suggerimento...
    la tua risposta resta perfetta ed esaustiva


    Ciao
    La farfalla continuerà a librarsi sui campi e la goccia di rugiada brillerà ancora sull'erba quando le piramidi saranno ormai appiattite e non esisteranno più i grattacieli
    di New York

  10. #10
    Utente di HTML.it L'avatar di daneel
    Registrato dal
    Oct 2002
    Messaggi
    229
    Per nosferatu_net: il problema è realmente circoscritto a due array separati, che non ho la possibilità di unire utilizzando un solo oggetto. Sviluppando l'applicazione in Python potrei anche utilizzare dei dizionari per tentare di aggirare il problema, ma il modo migliore di lavorare in questo caso sono due array. Fortunatamente ogni vettore non è lungo più di dieci posizioni. Comunque grazie per il suggerimento.

    Per antares25: con gli algoritmi di ordinamento mi sono già divertito molto. Mi ero rivolto al forum per sapere quale è il metodo più efficiente in js. Penso di testarne un po' da me.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.