- 258
- 5
- CPU
- AMD FX 8150
- Scheda Madre
- ASUS CROSSHAIR V FORMULA
- RAM
- ram 16gb kit (4x4GB) DDR3 2133MHZ CL11 RipjawsX
- GPU
- ATI RADEON 7970 Sapphire Vapor-x
- Monitor
- SAMSUNG S27B550V
- PSU
- CROSSHAIR TX850
- Case
- HAFX 942
- OS
- winzozz/linux
Buonasera a tutti,
ho un dubbio su l'ottimizzazione del merge sort tramite l'insertion sort, da richiamare ad un dato valore di soglia, che premetto di aver trovato tramite prove dei tempi tra mergesort ed insertion sort.
Il codice del merge sort modificato controllando il valore di soglia è il seguente, (tralascio il codice del merge):
Mentre dell'insertion sort modificato in modo da essere richiamato su una porzione di array è il seguente:
Ora però ho un dubbio perchè alcune volte funziona altre no. Sapete dirmi dove sbaglio ?
ho un dubbio su l'ottimizzazione del merge sort tramite l'insertion sort, da richiamare ad un dato valore di soglia, che premetto di aver trovato tramite prove dei tempi tra mergesort ed insertion sort.
Il codice del merge sort modificato controllando il valore di soglia è il seguente, (tralascio il codice del merge):
Codice:
public static void msort(int[] a, int n) {
msort(a, 0, n-1);
}
public static void msort(int[] a, int fst, int lst) {
if (lst - fst > 50) {
int m = (lst + inf) / 2;
msort(a, fst, m);
msort(a, m+1, lst);
merge(a, fst, m, lst);
} else {
isort(a, fst, lst);
}
}
Mentre dell'insertion sort modificato in modo da essere richiamato su una porzione di array è il seguente:
Codice:
public static void isort(int[] a, int fst, int lst) {
if (lst < a.length) {
for (int i = fst + 1; i <= lst; i++) {
int j = i, x= a[i];
while (j > fst && x < a[j-1]) {
a[j] = a[j-1];
j--;
}
a[j] = x;
}
}
}
Ora però ho un dubbio perchè alcune volte funziona altre no. Sapete dirmi dove sbaglio ?
Ultima modifica: