Advertisement
Guest User

Untitled

a guest
Dec 16th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.01 KB | None | 0 0
  1. static void merge(ElementType* arrayToSort, int* tempArray, int start, int end, Statistics* statistics) {
  2.  
  3.     // Diverse variabler för hantering av båda del-arrayerna
  4.     int leftEnd = (end + start) / 2;
  5.     int rightBegin = leftEnd + 1;
  6.     int size = end + start;
  7.     int left = start;
  8.     int right = rightBegin;
  9.     int tempIndex = start;
  10.  
  11.     // Loopar tills en utav del-arrayerna tar slut
  12.     while (lessThanOrEqualTo(left, leftEnd, statistics) && lessThanOrEqualTo(right, end, statistics)) {
  13.         if (lessThan(arrayToSort[left], arrayToSort[right], statistics)) {
  14.             tempArray[tempIndex] = arrayToSort[left];
  15.             left++;
  16.             tempIndex++;
  17.         }
  18.         else {
  19.             tempArray[tempIndex] = arrayToSort[right];
  20.             right++;
  21.             tempIndex++;
  22.         }
  23.     }
  24.  
  25.     // Endast en utav dessa while-loopar kommer att exekveras eftersom att en utan del-arrayerna är tom.
  26.     while (lessThanOrEqualTo(left, leftEnd, statistics)) {
  27.         tempArray[tempIndex] = arrayToSort[left];
  28.         left++;
  29.         tempIndex++;
  30.     }
  31.  
  32.     while (lessThanOrEqualTo(right, end, statistics)) {
  33.         tempArray[tempIndex] = arrayToSort[right];
  34.         right++;
  35.         tempIndex++;
  36.     }
  37.  
  38.     // Koperia över från den temporära arrayen till den vanliga
  39.     for (int i = 0; lessThan(i, size, statistics); i++) {
  40.         arrayToSort[i] = tempArray[i];
  41.     }
  42.  
  43.  
  44. }
  45.  
  46. static void mergeSplit(ElementType* arrayToSort, int* tempArray, int start, int end, Statistics* statistics) {
  47.  
  48.     // Om start och end är samma, returnera (Brutit ned för mycket)
  49.     if (equalTo(start, end, statistics))
  50.         return;
  51.  
  52.     // Räkna ut mitten för att kunna splitta array'en
  53.     int mid = (start + end) / 2;
  54.  
  55.     // Vänster Sida
  56.     mergeSplit(arrayToSort, tempArray, start, mid, statistics);
  57.  
  58.     // Höger Sida
  59.     mergeSplit(arrayToSort, tempArray, mid + 1, end, statistics);
  60.  
  61.     // Merga delArrayerna
  62.     merge(arrayToSort, tempArray, start, end, statistics);
  63.  
  64. }
  65.  
  66.  
  67.  
  68. static void mergeSort(ElementType* arrayToSort, unsigned int size, Statistics* statistics){
  69.  
  70.     int* temp = calloc(size, sizeof(int));
  71.  
  72.     mergeSplit(arrayToSort, temp, 0, size - 1, statistics);
  73.  
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement