Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347

    Ordinamento di una matrice

    come si fa ad ordinare una matrice secondo una regola precisa?
    mi spiego meglio: io ad esempio ho una matrice che nella prima riga contiene l'età di una persona e nella seconda il nome:
    | 36 15 18 46 10 |
    |Mario Francesco Andrea Giovanni Giuseppe|
    e ad esempio li voglio ordinare per età crescente o decrescente, come faccio?

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Trasformi la matrice in un vettore di "Persone", ciascuna con nome ed età.
    Poi ordini le "Persone" per età e trasformi il tutto in una matrice.

    Se poi devi evitare di costruire l'oggetto "Persona", allora puoi "costruire" un metodo di ordinamento come bubble sort o selection sort, confronti l'età secondo il criterio che ti interessa, ma sposti l'intera colonna.

    Se si tratta di un esercizio sugli algoritmi di ordinamento, allora la seconda soluzione potrebbe essere la migliore.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    no, non è un esercizio ma siccome potrebbe capitare all'esame, io prevengo XD comunque non abbiamo ancora fatto gli oggetti (è un esame di fondamenti di informatica) quindi nemmeno array di oggetti, quindi devo per forza creare un metodo però non so come devo fare, perchè ad ordinare un array non ci sarebbero problemi, però rispetto all'array dell'età (facciamo che lo devo ordinare in modo crescente) devo ordinare anche l'array dei nomi... come si fa?

    EDIT: per ordinare l'array avevo pensato proprio a qualcosa tipo il bubble sort(premetto che non li conosco, anche perchè non li abbiamo fatti .-.) però rimane il problema di ordinare anche il secondo array...

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Devi comunque immaginare di lavorare con un dato complesso, fatto di età e di nome.

    Anche se gli oggetti non li hai fatti, potresti semplificarti la vita associando ad ogni colonna un array di oggetti, dove il primo elemento è l'età e il secondo il nome.
    Che poi la matrice altro non è che un array di array, se la costruisci come un array di colonne hai già tutto quel che ti serve. Altrimenti invece di spostare la colonna, devi spostare eta e nome separatamente. Visto che son due righe, non è che cambi molto.

    All'interno del codice di ordinamento il confronto sarà fatto sull'età, solo che sposti l'intera colonna o i dati dell'intera colonna.

    Se sai fare il bubble sort per una sequenza di numeri, non ti sarà difficile estenderlo per gli elementi della tua matrice. Dopo il confronto sai in che colonna mettere l'età, il nome lo metti nella stessa colonna, ma nella riga sotto.

    Carta e penna possono tornar utili per schiarirsi le idee in casi come questi...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    quindi basta che creo una nuova matrice lavorando invece che sulle "caselle", sulle colonne?
    per quanto rigurda il bubble sort come ho detto non so farlo e non lo conosco, ho detto che la mia idea era simile solo che per fermare l'iterazione, che condizione dovrei mettere? è giusto questo?
    codice:
    int tmp;
    for(int i=0, i<array.length, i++)
        for(int j=0, j<array.length, j++)
            if(array[j]>array[j+1])
            tmp=array[j];
            array[j]=array[j+1];
            array[j+1]=tmp;

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    up

  7. #7
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Boh, dallo pseudocodice sei capace di scrivere il codice java?

    Qui trovi lo pseudocodice:

    http://it.wikipedia.org/wiki/Bubble_sort

    if A[ i ] > A[i+1] then
    Questo è il confronto sull'età.

    swap( A[ i ], A[i+1] )
    Qui, nella versione originale A[ i ] e A[i+1] sono numeri, per te sono colonne, quindi oltre a scambiare le età, dovresti scambiare anche i nomi, sempre tra colonna i e colonna i+1.

    Quel che hai scritto sopra non è java.., ma somiglia molto alla versione "base" che trovi qui:

    http://www.simplesoft.it/bubble-sort.html

    Il flag non è necessario, le altre differenze dovresti trovarle da solo, anche provando a compilare.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    vabbe quello che ho scritto sopra l'ho scritto così un po al volo però è molto simile a quello che mi hai indicato tu, e senza il flag appunto...
    codice:
    public void bubbleSort(int[] array){
        int tmp;
        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array.length-1; j++){
                  if(array[j]>array[j+1]){
                       tmp=array[j];
                       array[j]=array[j+1];
                       array[j+1]=tmp;
                  }
            }
        }
    }
    così è giusto?

  9. #9
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Scusa, ma questo non puoi verificarlo tu? No perché adesso questa discussione mi sembra surreale...

    Hai anche due opzioni:
    1. controlla riga per riga con quello dall'altra parte (sono meno di 10 righe di codice quasi identiche a quello che hai scritto tu)
    2. compila ed esegui il codice che hai scritto

    Il mio consiglio è di fare in tutti e due i modi, nell'ordine che ti ho dato.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

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 © 2025 vBulletin Solutions, Inc. All rights reserved.