andbin ha scritto:
SickAnon ha scritto:
L'ho fatto in questa maniera perché non riesco a capire come incrementare la molteplicità in caso siano uguali i due elementi.
public static Elem[] abc (Elem[] a){
double[] sup = new double[a.length];
for(int i=0;i<a.length;i++) {
sup=a.valore;
}
mergeSort(sup);
Già solo questo non ha granché senso. Innanzitutto
sup=a.valore;
non ha senso. Non puoi assegnare un valore numerico ad una variabile array.
Poi comunque se vuoi seguire la strada dell'ordinamento iniziale con algoritmo a caso peggiore O(n log n), come appunto il Merge Sort, non devi ordinare un array di double! Devi ordinare un array Elem[] usando il valore come chiave di confronto.
Per quanto riguarda sup=a.valore sarebbe sup i=a i .valore ma copiando il codice sono state troncate tutte le i.
Comunque volevo ordinare l'array di Elem[] ma il mergesort mi da errore.
static void mergeSort2(Elem[] a) {
Elem[] arr = new Elem[a.length];
mergeSort2(a, 0, a.length - 1, arr);
}
static void mergeSort2(Elem[] a, int p, int r, Elem[] arr) {
if (p < r) {
int q = (p + r) / 2;
mergeSort2(a, p, q, arr);
mergeSort2(a, q + 1, r, arr);
merge2(a, p, q, r, arr);
}
}
static void merge2(Elem[] a, int p, int q, int r, Elem[] arr) {
for (int i = p; i <= r; i++) {
arr
.valore = a.valore;
}
int sin = p;
int des = q + 1;
for (int i=p; i<=r;i++) {
if (sin<=q && (des>r || arr[sin].valore<=arr[des].valore)) {
a.valore=arr[sin].valore;
sin++;
} else {
a.valore = arr[des].valore;
des++;
}
}
}