Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62

    [c++] mi date un suggerimento per esercizio sui vettori?

    ciao a tutti..
    vorrei un suggerimento..
    devo scrivere un programma che inserisca elementi in un vettore già ordinato..
    se ad esempio il vettore è composto dai numeri 4 6 8 9, aggiungendo 3 e 5, avrò
    3 4 5 6 8 9
    è meglio che creo due vettori che poi vado a fondere in un terzo e ordino quest'ultimo,o posso fare diversamente?
    grazie!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465

    Re: mi date un suggerimento per esercizio sui vettori?

    Originariamente inviato da milu
    ciao a tutti..
    vorrei un suggerimento..
    Non sai che questo forum ha un regolamento?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Puoi seguire più approcci.
    Supponendo che il vettore già ordinato sia già grande a sufficienza per contenere tutti gli elementi:
    - se tu hai già pronta una funzione di ordinamento, il metodo più immediato e "ignorante" può essere accodare i due elementi e ordinare il vettore così ottenuto; le performance quindi sono O(n log n) nel numero totale di elementi (in realtà per alcuni algoritmi peggio, ad esempio il quicksort, con un vettore quasi completamente ordinato, peggiora di molto le performance).
    - un metodo più furbo può invece sfruttare il fatto che il primo vettore è già ordinato, e che il secondo (se è di pochi elementi) si ordina molto in fretta. A questo punto, ti muovi con tre indici (o puntatori): un indice di scrittura sul vettore finale, uno di lettura su ciascuno dei due vettori. L'indice di scrittura parte dall'ultimo slot del vettore di destinazione, e i due indici di lettura partono nell'ultima posizione valida dei due vettori di input. Ad ogni iterazione, controlli quale elemento di quelli puntati dai due indici di lettura è il minore; questo verrà copiato nella posizione indicata dall'indice di scrittura, e il corrispondente indice (oltre a quello di scrittura) viene spostato indietro di un posto. Supponendo che il secondo vettore sia già ordinato, questa fase di merge è O(n) nel numero totale degli elementi.

    Se invece non c'è spazio nel vettore di destinazione, puoi fare la stessa cosa usando un terzo vettore, ma in questo caso nulla ti impedisce di lavorare "dal davanti" dei vettori (il lavorare all'indietro è reso necessario per lavorare inplace sul secondo vettore); quello appena descritto comunque è detto "algoritmo di merge".

    ---

    In ogni caso, dovresti chiarire se si tratta di una questione puramente algoritmica, oppure, se si parla di codice, come già sai devi specificare il linguaggio di riferimento (anche nel titolo).
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    scusatemi volevo un consiglio..non voglio codici pronti..devo scriverlo io e volevo un suggerimento..
    grazie comunque..

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da milu
    devo scriverlo io
    Adesso hai aggiunto il linguaggio, ma dovresti indicarlo *sempre* sin dall'inizio perché è importante ai fini della risposta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    hai ragione..
    sorry

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.