Nella parte merge_sort, ci sono più chiamate alla stessa funzione all'interno del ricorsivo. Come vengono eseguiti gli altri due quando la definizione afferma che finché una condizione non è falsa, la ricorsione non si ferma?
T tempArray[right - left + 1];
int pos = 0;
int left_pos;
int right_pos = mid + 1;
while (left_pos <= mid && right_pos <= right) {
if (array[left_pos] < array[right_pos]) {
tempArray[pos++] = array[left_pos++];
} else {
tempArray[pos++] = array[right_pos++];
}
}
while (left_pos <= mid) {
tempArray[pos++] = array[left_pos++];
}
while(right_pos <= right) {
tempArray[pos++] = array[right_pos++];
}
for(int iter = 0; iter < pos; iter++) {
array[iter + left] = tempArray[iter];
}
return;
}
static void merge_sort(T* array, int left, int right) {
int mid = (right + left) / 2;
// We have to sort only when left < right because when left==right it is anyhow sorted
if (left < right) {
// Sort the left part//
merge_sort(array, left, mid);
merge_sort(array, mid + 1, right);
_merge(array, left, mid, right);
}
return;
}
}