title: Merge Sort - Wrong Output
body: <p>I have just implemented Merge Sort in C. In terms of logic I think my code is right. Although, the output is wrong. And the output is not the number I have in the original array. That is what I find odd. Please help me. The output I receive is: -1 0 0 -1 0 4.</p>
  
  <p>Here is the code:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  
  void merge (int right[], int left[], int elements[], int midValue) {
  
      int lengthL = midValue; /*tamanho do array da esquerda*/
      int lengthR = midValue - 1; /*tamanho do array da direita*/
  
      int i = 0; /*index do numero mais pequeno no array da esquerda*/
      int j = 0; /*index do numero mais pequeno no array da direita*/
      int k = 0; /*representa o index da posicao que precisa de ser preenchida no array original
                 que neste caso é "elementos"*/
  
      while (i &lt; lengthL &amp;&amp; j &lt; lengthR) {
          if (left[i] &lt;= right[j]) {
              elements[k] = left[i];
              i = i + 1;
          }
          else {
              elements[k] = right[j];
              j = j + 1;
          }
          k = k + 1;
      }
  
  
      /*estes dois while loops seguintes sao para as sobras em ambos
      os arrays. depois de sair do primeiro while loop que esta acima apenas um
      dos while loops a seguir serao executados pois apenas irá haver sobras em apenas um deles*/
  
      while (i &lt; lengthL) {
          elements[k] = elements[i];
          i = i + 1;
          k = k + 1;
      }
  
      while (j &lt; lengthR) {
          elements[k] = elements[j];
          j = j + 1;
          k = k + 1;
      }
  
  }
  
  void MergeSort (int elements[], int numberOfElements) {
  
      if (numberOfElements &lt; 2) {
          return;
      }
  
      int midValue = numberOfElements / 2;
  
      int left[midValue];
      int right[midValue - 1];
  
      for (int i = 0; i &lt; midValue - 1; i = i + 1) {
          left[i] = elements[i];
      }
  
      for (int i = midValue; i &lt; numberOfElements - 1; i = i + 1) {
          right[i] = elements[i];
      }
  
      MergeSort(left, midValue);
      MergeSort(right, midValue - 1);
      merge(left, right, elements, midValue);
  }
  
  
  
  int main() {
  
      int elements[6] = {2, 1, 5, 3, 7, 4};
  
      int numberOfElements = 6; /*número de elementos do array*/
  
      MergeSort(elements, numberOfElements);
  
      for(int i = 0; i &lt; numberOfElements; i = i + 1) {
          printf("%d ",elements[i]);
      }
  
  }
  </code></pre>