Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. static void QuickSort(int[] lst, int start, int end)
  2. {
  3. if (start >= end)
  4. {
  5. return;
  6. }
  7.  
  8. int pivot = Partition(lst, start, end);
  9. QuickSort(lst, start, pivot - 1);
  10. QuickSort(lst, pivot + 1, end);
  11. }
  12.  
  13. static int Partition(int[] lst, int start, int end)
  14. {
  15. int temp;
  16. int marker = start;
  17. for ( int i = start; i <= end; i++ )
  18. {
  19. if ( lst[i] < lst[end] )
  20. {
  21. temp = lst[marker];
  22. lst[marker] = lst[i];
  23. lst[i] = temp;
  24. marker += 1;
  25. }
  26. }
  27. temp = lst[marker];
  28. lst[marker] = lst[end];
  29. lst[end] = temp;
  30. return marker;
  31. }
  32.  
  33. static void MergeSort(int[] lst, int begin, int end)
  34. {
  35. if (begin < end)
  36. {
  37. int half = (begin + end) / 2;
  38. MergeSort(lst, begin, half);
  39. MergeSort(lst, half + 1, end);
  40. Merge(lst, begin, half, end);
  41. }
  42. }
  43.  
  44. static void Merge(int[] lst, int begin, int half, int end)
  45. {
  46. int[] leftArray = new int[half - begin + 1];
  47. int[] rightArray = new int[end - half];
  48.  
  49. Array.Copy(lst, begin, leftArray, 0, half - begin + 1);
  50. Array.Copy(lst, half + 1, rightArray, 0, end - half);
  51.  
  52. int i = 0;
  53. int j = 0;
  54. for (int k = begin; k < end + 1; k++)
  55. {
  56. if (i == leftArray.Length)
  57. {
  58. lst[k] = rightArray[j];
  59. j++;
  60. }
  61. else if (j == rightArray.Length)
  62. {
  63. lst[k] = leftArray[i];
  64. i++;
  65. }
  66. else if (leftArray[i] <= rightArray[j])
  67. {
  68. lst[k] = leftArray[i];
  69. i++;
  70. }
  71. else
  72. {
  73. lst[k] = rightArray[j];
  74. j++;
  75. }
  76. }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement