avatar
Untitled

Guest 601 21st Nov, 2020

void merge(int a[], int first, int mid, int last) {
	int* temp = new int[last + 1]; //Temporary array

	// Initialize the local indices to indicate the subarrays
	int first1 = first; // Beginning of first subarray
	int last1 = mid; // End of first subarray
	int first2 = mid + 1; // Beginning of second subarray
	int last2 = last; // End of second subarray
	// While both subarrays are not empty, copy the
	// smaller item into the temporary array
	int index = first1; // Next available location in tempArray
	while ((first1 <= last1) && (first2 <= last2))
	{
		// At this point, tempArray[first..index-1] is in order
		if (a[first1] <= a[first2])
		{
			temp[index] = a[first1];
			first1++;
		}
		else
		{
			temp[index] = a[first2];
			first2++;
		} // end if
		index++;
	}
	// Finish off the first subarray, if necessary
	while (first1 <= last1)
	{
		// At this point, tempArray[first..index-1] is in order
		temp[index] = a[first1];
		first1++;
		index++;
	} // end while
	// Finish off the second subarray, if necessary
	while (first2 <= last2)
	{
		// At this point, tempArray[first..index-1] is in order
		temp[index] = a[first2];
		first2++;
		index++;
	} // end for
   // Copy the result back into the original array
	for (index = first; index <= last; index++)
		a[index] = temp[index];
	//Release memory
	delete[]temp;
}

void sortMerge(int a[], int first, int last) {
	if (first < last) {
		// Sort each half
		int mid = first + (last - first) / 2; // Index of midpoint
		// Sort left half theArray[first..mid]
		sortMerge(a, first, mid);
		// Sort right half theArray[mid+1..last]
		sortMerge(a, mid + 1, last);
		// Merge the two halves
		merge(a, first, mid, last);
	}
}
Markup
Description

No description

To share this paste please copy this url and send to your friends
RAW Paste Data