|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Member
Iscritto dal: Dec 2009
Città: Varese
Messaggi: 274
|
ok mi rivolgo a demos per il codice che mi ha lui stesso suggerito:
in questa riga di codice, Codice:
for (j = min = i; j < array.length; j++) //ciclo interno, ripete n - i volte qui Codice:
if (array[j] < array[min]) nelle istruzioni successive non ho capito che senso ha assegnare a tmp = array[i], in quanto comunque la variabile è già a 0 e sarà modificata 2 istruzioni dopo. per il resto le istruzioni mi tornano (ci ho messo qualche minuto a capire), proverò a compilare più tardi
__________________
#FollowMe!AMD Ryzen 1700X, ASUS Crosshair VI Hero, 32 GB DDR4 Corsair Vengeance 3200, NVidia GTX 960, Samsung 970 PRO, Phanteks Enthoo EVOLV ATX TG, LC EKWB custom loop e un po' di RGB... |
|
|
|
|
|
#22 | |||
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Quote:
Quote:
L'array, prima dell'algoritmo viene riempito e passato come parametro della funzione selectionSort(int[] array) Quote:
prima faccio una copia di array[i] in tmp poi copio array[min] in array[i]. A questo punto all'indice min e i ho lo stesso valore, però io devo rimettere dentro il valore che ho sostuito, e lo rimetto in array[min], quindi array[min] = tmp Tutto questo perchè il selection sort è un algoritmo in-place, lavora quindi sulla struttura dati stessa, spiegazione su wikipedia: http://it.wikipedia.org/wiki/Algoritmo_in_loco
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight Ultima modifica di demos88 : 04-01-2012 alle 17:39. |
|||
|
|
|
|
|
#23 |
|
Member
Iscritto dal: Dec 2009
Città: Varese
Messaggi: 274
|
ah ok, capito. ho letto attentamente la voce su wiki.
questo funziona giusto, non avevo ben realizzato stessi usando un algoritmo completamente diverso! ...unica cosa è che mi sono fossilizzato sul far funzionare il Bubble Sort; ora ho trovato questo esempio di codice: http://it.wikibooks.org/wiki/Impleme...mi/Bubble_sort ci riprovo un'altra volta ora, grazie per la pazienza :S
__________________
#FollowMe!AMD Ryzen 1700X, ASUS Crosshair VI Hero, 32 GB DDR4 Corsair Vengeance 3200, NVidia GTX 960, Samsung 970 PRO, Phanteks Enthoo EVOLV ATX TG, LC EKWB custom loop e un po' di RGB... Ultima modifica di djadry : 04-01-2012 alle 20:16. |
|
|
|
|
|
#24 | |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Quote:
Il nome stesso (bubble) suggerisce il metodo in cui lavora, l'algoritmo lavora sempre secondo il concetto di substringa ordinata e non ordinata, solo che quella ordinata non è all'inizio ma alla fine. Il nome "bubble" dipende dal fatto che l'algoritmo parte dall'inizio della sequenza di valori e fa "salire" come una bolla i valori maggiori (come nell'esempio, ma possono anche essere i minori per avere ordinamento decrescente) fino alla cima. Nell'algoritmo che hai visto in quel sito, che riporto: Codice:
public void bubbleSort(int[] x)
{
int temp = 0;
int j = x.length-1;
while(j>0)
{
for(int i=0; i<j; i++)
{
if(x[i]>x[i+1]) //scambiare il '>' con '<' per ottenere un ordinamento decrescente
{
temp=x[i];
x[i]=x[i+1];
x[i+1]=temp;
}
}
j--;
}
}
Concettualmente è simile al selection sort, solo che ad ogni comparazione, se la disuguaglianza è vera, sposta un elemento in modo da "avvicinarlo" alla sequenza ordinata. Esempio: 5 8 1 6 4 3 1° ciclo: j = 5, i = 0; 5 >= 8 ? no, quindi non fare nulla 5 8 1 6 4 3 j = 5, i = 1; 8 >= 1 ? si, quindi inverti 8 con 1 5 1 8 6 4 3 j = 5, i = 2; 8 >= 6 ? si, quindi inverti 8 con 6 5 1 6 8 4 3 j = 5, i = 3; 8 >= 4 ? si, quindi inverti 8 con 4 5 1 6 4 8 3 j = 5, i = 4; 8 >= 3 ? si, quindi inverti 8 con 3 5 1 6 4 3 8 j = 5, i = 5; i = j -> ciclo finito, gli elementi da j in poi sono ordinati (j è ancora uguale a 5) 5 1 6 4 3 8 j-- 2° ciclo: 5 1 6 4 3 8 j = 4, i = 0; 5 >= 1? si, quindi inverti 5 con 1 1 5 6 4 3 8 j = 4, i = 1; 5 >= 6 ? no, quindi non fare nulla 1 5 6 4 3 8 j= 4, i = 2; 6 >= 4 ? si, quindi inverti 6 con 4 1 5 4 6 3 8 j = 4, i = 3; 6 >= 3 ? si, quindi inverti 6 con 3 1 5 4 3 6 8 j = 4, i = 4; i = j -> ciclo finito, gli elementi da j in poi sono ordinati (j = 4) 1 5 4 3 6 8 3° ciclo: penso ti sia chiaro...
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:09.




















