void mergeSort_recursive(int array[], int n) {
		int i, l, r;
		int bufl[n/2];
		int bufr[n/2+(n % 2)];
		
		if (n <= 1)
			return;
		for (i = 0; i < n/2; i++) {
			bufl[i] = array[i];
		}
		for (r = 0; i < n; i++, r++) {
			bufr[r] = array[i];
		}
		mergeSort_recursive(bufl, n/2);
		mergeSort_recursive(bufr, n - n/2);
		for (i = 0, l = 0, r = 0; i < n; i++){
			if ( !(r < n - n/2) ) {
				array[i]=bufl[l];
				l++;
				continue;
			} else if ( !(l < n) ) {
				array[i]=bufr[r];
				r++;
				continue;
			} else if ( (bufl[l] < bufr[r]) ) {
				array[i]=bufl[l];
				l++;
			} else {
				array[i]=bufr[r];
				r++;
			}
		}
		return;
    }
Beispiel #2
0
void mergeSort_recursive(std::vector<T> &nums, int low, int high) {
	if (low >= high) return;

	int mid = low + (high-low)/2;
	mergeSort_recursive(nums, low, mid);
	mergeSort_recursive(nums, mid+1, high);

	merge(nums, low, mid, high);
	return;
}