PDA

Visualizza la versione completa : [java] ordinamento per selezione


Lucked
07-12-2003, 17:43
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 :smack:


// 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;
}
}

}

LeleFT
07-12-2003, 18:07
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) ??

Lucked
07-12-2003, 18:16
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)

LeleFT
07-12-2003, 18:16
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:


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.

Lucked
07-12-2003, 18:21
Bravo, in questo modo abbiamo anche eliminato una variabile...thanks!
Luca

Loading