Advertisement
Guest User

Untitled

a guest
Apr 19th, 2014
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. class MergeSort
  2. {
  3. public void ParallelSort(int[] values)
  4. {
  5. int[] aux = new int[values.Length];
  6. Start = DateTime.Now.Ticks;
  7.  
  8. int lo = 0;
  9. int hi = values.Length - 1;
  10. int mid = values.Length / 2;
  11.  
  12. Sort(values, aux, lo, mid, hi);
  13.  
  14. End = DateTime.Now.Ticks;
  15. }
  16.  
  17. private void Sort(int[] values, int[] aux, int lo, int mid, int hi)
  18. {
  19. if (hi - lo > 32)
  20. {
  21. Parallel.Invoke(
  22. () => Sort(values, aux, lo, (mid + lo)/2, mid),
  23. () => Sort(values, aux, mid + 1, (hi + mid)/2, hi));
  24. Merge(values, aux, lo, mid, hi);
  25.  
  26. }
  27. else
  28. InsertionSort.Sort(values, lo, hi);
  29. }
  30. private unsafe void Merge(int[] values, int[] aux, int lo, int mid, int hi)
  31. {
  32. Buffer.BlockCopy(values, sizeof(int)* lo, aux, sizeof(int) * lo, sizeof(int) * (hi-lo + 1));
  33.  
  34. int i = lo;
  35. int j = mid+1;
  36.  
  37. fixed (int* a = values, b = aux)
  38. {
  39. for (int k = lo; k <= hi; k++)
  40. {
  41. if (i > mid)
  42. a[k] = b[j++];
  43. else if (j > hi)
  44. a[k] = b[i++];
  45. else if (b[i] < b[j])
  46. a[k] = b[i++];
  47. else
  48. a[k] = b[j++];
  49. }
  50. }
  51.  
  52. }
  53. }
  54.  
  55. class InsertionSort
  56. {
  57. public static unsafe void Sort(int[] values, int lo, int hi)
  58. {
  59. fixed (int* b = &values[0])
  60. {
  61. for (int i = lo+1; i <= hi; i++)
  62. {
  63. int tmp = b[i];
  64. int j;
  65. for (j = i; j > 0 && tmp < b[j - 1]; j--)
  66. b[j] = b[j - 1];
  67. b[j] = tmp;
  68. }
  69. }
  70. }
  71. }
  72.  
  73. Thread 3 slice: 93-123 IsSorted: False
  74. Thread 6 slice: 62-92 IsSorted: False
  75. Thread 10 slice: 0-30 IsSorted: True
  76. Thread 9 slice: 124-154 IsSorted: False
  77. Thread 7 slice: 185-214 IsSorted: True
  78. Thread 5 slice: 31-61 IsSorted: False
  79. Thread 8 slice: 155-184 IsSorted: False
  80. Thread 4 slice: 215-245 IsSorted: False
  81.  
  82. for (j = i; j > lo && tmp < b[j - 1]; j--)
  83.  
  84. for (j = i; j > 0 && tmp < b[j - 1]; j--)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement