Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Problema con Insertion Sort

    Vorrei implementare il metodo Insertion Sort ma non riesco a trovare un algoritmo funzionante. Su google ho trovato questo:

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

    ma non riesco a capire cosa è questo min e cosa prende java quando il for è privo del "purto di partenza": ...for(?;...

    Qualcuno mi può spiegare questo punto?

    codice:
    public void insertionSort(int [] array) {
            for(int i = 1; i < array.length; i++) {
               int x = i;
               int j = i-1;
               for(; j >= min; j--) {
                   if(array[j]>array[x]) {
                       int k = array[x];
                       array[x] = array[j];
                       array[j] = k;
                       x = j;
                   } else break;
               }
            }
        }

  2. #2
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    questo si chiama uguale e l'ho capito:

    http://www.enricomilano.it/sintassi....teri.&cod=1120



    però vorrei capire come interpretare i cicli del tipo for(?;... perché me ne sono già capitati altri...


  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io preferisco la versione col while... è più chiara e tale costrutto (il while) è stato inventato apposta per effettuare un ciclo con possibilità di uscita immediata (diversamente dal for che, pur permettendolo, è stato inventato per fare sempre lo stesso numero di cicli).

    codice:
       public static void insertionSort(int[] arr) {
          if (arr.length > 1) {
             int i = 0;
             int j = 0;
             int val = 0;
             for(i=1; i<arr.length; i++) {
                val = arr[i];
                j = i-1;
                while((j >= 0) && (arr[j] > val)) {
                   arr[j+1] = arr[j];
                   j = j - 1;
                   arr[j+1] = val;
                }
             }
          }
       }
    Per quanto riguarda l'istruzione for... questa è la sintassi:
    codice:
    for(inizializzazione; condizione_di_iterazione; espressione/incremento) 
       istruzioni
    Questo costrutto esegue le istruzioni finchè la condizione_di_iterazione si mantiene vera. Il for può (non è obbligatorio) effettuare un'inizializzazione al primo passo. Solitamente questa inizializzazione riguarda la variabile che controlla il ciclo (che, sempre solitamente, ma non obbligatoriamente, viene anche dichiarata in quel punto), ma non è obbligatorio. Se non viene fatta alcuna inizializzazione, semplicemente la variabile che controlla il ciclo rimane al suo valore attuale. Nota che nell'inizializzazione non è obbligatorio inizializzare la variabile che controlla il ciclo... semplicemente si può eseguire una qualsiasi istruzione.

    L'espressione/incremento, solitamente (anche qui, non obbligatoriamente) effettua l'incremento/decremento della variabile che controlla il ciclo.

    Nel caso specifico del tuo esempio, la variabile "j" che controlla il ciclo, viene inizializzata fuori dal ciclo for... non essendoci l'inizializzazione, essa non viene toccata e quando il ciclo inizia avrà lo stesso valore che aveva prima del ciclo stesso.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.