Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void threaded_merge_sort(int[] getallen, int p, int r, int depthRemaining)
- {
- if (p < r)
- {
- int q = (p + r) / 2;
- if (depthRemaining > 0)
- {
- Parallel.Invoke(
- () => threaded_merge_sort(getallen, p, q, depthRemaining-1)/*,
- () => threaded_merge_sort(getallen, q + 1, r, depthRemaining-1)*/);
- threaded_merge_sort(getallen, q + 1, r, 0);
- }
- else
- {
- threaded_merge_sort(getallen, p, q, 0);
- threaded_merge_sort(getallen, q+1, r, 0);
- }
- merge(getallen, p, q, r);
- }
- }
- public void merge(int[] getallen, int p, int q, int r)
- {
- int n1 = q - p + 1;
- int n2 = r - q;
- int[] left = new int[n1];
- int[] right = new int[n2];
- for (int i = 0; i < n1; i++)
- left[i] = getallen[p + i];
- for (int i = 0; i < n2; i++)
- right[i] = getallen[q + 1 + i];
- int leftCounter = 0;
- int rightCounter = 0;
- for (int k = p; k <= r; k++)
- {
- if (left.Length > leftCounter && right.Length > rightCounter)
- {
- if (left[leftCounter] <= right[rightCounter])
- getallen[k] = left[leftCounter++];
- else
- getallen[k] = right[rightCounter++];
- }
- else if (left.Length > leftCounter)
- getallen[k] = left[leftCounter++];
- else if (right.Length > rightCounter)
- getallen[k] = right[rightCounter++];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement