Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [java] ordinamento per selezione

    Ciao a tutti questo dovrebbe essere l'ordinamento per selezione, ma mi da un errore in fase di esecuzione: ArrayIndexOutOfBoundsException
    - se sapete dirmi dove ho sbagliato vi ringrazio


    // Odinamento per selezione (selection sort)


    class Ordina2 {
    public static void main(String[] args) {
    int array[] = {10,6,4,2,40,20,40,5,6};
    selectionSort(array);

    for(int i=0;i<array.length;i++)
    System.out.println(array[i]);
    }


    public static void selectionSort(int number[]){
    int startIndex, minIndex, length, temp, min;
    length = number.length;

    for(startIndex=0;startIndex<length-1;startIndex++) {

    min = startIndex;

    for(minIndex=startIndex+1; minIndex<length; minIndex++)
    if(number[minIndex]<number[min]) min = minIndex;
    temp = number[startIndex];
    number[startIndex] = number[min];
    number[minIndex] = temp;
    }
    }

    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non capisco come tu intenda far funzionare questo algoritmo...

    Se trovi un valore che è minore di quello puntato da min scambi gli indici e, in qualsiasi caso, scambi anche due valori (anche se non dovrebbero essere scambiati) ??
    "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

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    L'ho fatta la correzione che mi hai detto ma non è cambiato nulla, sempre lo stesso errore. E poi fai attenzione:

    startIndex<length-1: arriva fino al penultimo elemento(partendo da 0)

    minIndex<length: arriva fino all'ultimo elemento(partendo dal successivo a starIndex)

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sì... me ne sono accorto dopo. L'errore stà nel fatto che non hai usato bene le parentesi graffe e quindi scambi valori degli indici, che poi sconfinano..

    Questa è la versione riveduta e corretta:
    codice:
    class Ordina2 { 
       public static void main(String[] args) { 
          int array[] = {10,6,4,2,40,20,40,5,6}; 
          selectionSort(array); 
    
          for(int i=0;i<array.length;i++) 
             System.out.println(array[i]); 
       } 
    
    
       public static void selectionSort(int number[]){ 
          int startIndex, minIndex, length, temp, min; 
          length = number.length; 
    
          for(startIndex=0;startIndex<length-1;startIndex++) { 
    
             for(minIndex=startIndex+1; minIndex<length; minIndex++) {
                if(number[minIndex]<number[startIndex]) {
                   temp = number[startIndex]; 
                   number[startIndex] = number[minIndex]; 
                   number[minIndex] = temp; 
                }
             }         
          } 
       } 
    
    }

    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Bravo, in questo modo abbiamo anche eliminato una variabile...thanks!
    Luca

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.