Anche per il merge sono nella stessa barca cerco aiuto
Posto il codice(Rigorosamente fatto da me visto di la e di qua ma non capendo il perchè), avendo capito il procedimento che fa
Posto il codice
codice:
public class MergeSort
{
public static void stampaVettore(int[] v, String messaggio)
{
System.out.println(messaggio);
for(int i=0; i<v.length; i++)
{
System.out.println(v[i]);
}
return;
}
public static void merge(int[] a, int from, int mid, int to)
{
int n = to - from + 1; // qua non riesco a capire perchè?
int[] b = new int[n];
int i1 = from;
int i2 = mid + 1;
int k = 0; // perchè questo k
while (i1 <= mid && i2 <= to)
{
if (a[i1] < a[i2])
{
b[k] = a[i1];
i1++;
}
else
{
b[k] = a[i2];
i2++;
}
k++;
}
if(i2>to)
while (i1 <= mid)
{
b[k] = a[i1];
i1++;
k++;
}
else
while (i2 <= to)
{
b[k] = a[i2];
i2++;
k++;
}
for (k = 0; k < b.length; k++)
a[from + k] = b[k];
}
public static void mergeSort(int[] a, int from, int to)
{
if (from == to)
return;
int mid = (from + to) / 2;
mergeSort(a, from, mid);
mergeSort(a, mid + 1, to);
merge(a, from, mid, to);
}
public static void sort(int[] a)
{
mergeSort(a, 0, a.length - 1);
}
public static void main(String[] args)
{
int[] vettore ={10, 20, 15, 37, 21, 33, 22, 1, 120, 2, 11, 119};
stampaVettore(vettore, "array non ordinato");
sort(vettore);
System.out.println();
stampaVettore(vettore, "array ordinato");
System.exit(0);
}
}
Qua per esempio non riesco a capire materialmente cosa fa il metodo merge