Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    68

    Problema divisione lista java

    Salve ragazzi,
    avrei un piccolo problema di programmazione.
    in pratica devo dividere una lista ricorsivamente e poi passarla a un secondo metodo già implementato che unisce due liste (ordinate) ordinandole.
    in pratica una sorta di mergesort..
    io avevo pensato a qualcosa del genere ma nn funziona:

    public static <E>PositionList mergesort(PositionList<Integer> l){
    PositionList<Integer> lista1=new NodePositionList<Integer>();
    PositionList<Integer> lista2=new NodePositionList<Integer>();
    for(int i=0;i<l.size()/2;i++){
    lista1.addLast(l.remove(l.first()));
    }
    for(int i=l.size()/2;i<l.size();i++){
    lista2.addLast(l.remove(l.last()));
    }
    mergesort(lista1);
    mergesort(lista2);
    return merge(lista1,lista2);
    }

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Scusa, ma come pretendi che qualcuno sappia darti una risposta?

    addLast() e remove() cosa fanno?

    Se remove() rimuove un elemento da l, il comportamento dei due cicli di for sono alquanto anomali, se l ha inizialmente 20 elementi, il primo ciclo di for si ferma all'ottava iterazione

    i l.size
    0 20
    1 19
    2 18
    3 17
    4 16
    5 15
    6 14
    7 13 i<l.size()/2 ? no, quindi esce dal ciclo di for

    Se questo è il comportamento desiderato, capisci bene che nessuno può capire cosa vuoi fare, se invece non ti eri accorto di questa cosa ti consiglierei vivamente di imparare a fare un po' di debug usando System.out.println().
    "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
    Jan 2007
    Messaggi
    68
    allora
    l è la lista e l.remove rimuove un elemento dalla lista che puoi essere il primo-> l.first() e
    ultimo--> l.last()

    ora il punto è che se io ho una lista

    2 3 4 5 6 67 1 2 3 4

    questa lista devo dividerla a metà e la prima metà inserirla in una lista e l'altra inseririla in un'atra.
    poi ricorsivamente devo richiamare la funziona finchè ogni lista abbia al massimo due elementi e chiamare un'altra funzione che fonde le liste ordinandole..
    il punto è che il metodo deve essere ricorsivo!

    l.size ovviamente restituisce la dimensione della lista,ovvero la size degli elementi della lista..

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    ok.
    Comincia a scrivere un codice che divida effettivamente la lista a metà e metta ciascuna metà in una nuova lista.
    Quello che hai scritto tu non funziona e credo di averti spiegato abbastanza bene perché.
    "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.