sorting - Different C compilers giving different results for Merge Sort -


i running merge sort implementation , giving correct results in https://code.hackerearth.com/4a1c9cn wrong results in http://www.tutorialspoint.com/compile_c_online.php?pid=0bw_cjbb95kqmvwwxwv9qyle5v0u.

can tell me mistakes , things keep in mind avoid such mistakes in future. sample test case: 5 3 7 5 9 2 wrong answer second compiler: 03579 code:

#include <stdio.h> #include <stdlib.h>  void merge(int a[], int left[], int right[], int n) {      int i=0, j=0, k=0, m = n/2, d = n-m;      while(i<m && j<d)      {          if(left[i] <= right[j]) a[k++] = left[i++];          else a[k++] = right[j++];      }     if(i == m)         for(;k<n; k++, j++) a[k] = right[j];     else if(j == d)         for(; k<n; k++, i++) a[k] = left[i];     return; }  void mergesort(int a[], int n) {     if(n==1) return;     int m = n/2;     int* left = (int*)malloc(m*sizeof(int));     int* right = (int*)malloc((n-m)*sizeof(int));     int i, j;     for(i=0; i<m; i++) left[i] = a[i];     for(i=m; i<n; i++, j++) right[j] = a[i];     mergesort(left, m);     mergesort(right, (n-m));     merge(a, left, right, n);     return; }   int printarr(int a[], int n); void getarr (int a[], int n);  int main(int argc, char** argv) {     int n, *arr;     scanf("%d", &n);     arr = (int*)malloc(n*sizeof(int));     getarr(arr, n);     mergesort(arr, n);     printarr(arr, n);     return 0; } 

after helpful comments, able fix code. reason of error memory leaking. modified code:

#include <stdio.h> #include <stdlib.h>  void merge(int a[], int l, int h) {   int* temp = (int*)malloc((h-l+1)*sizeof(int));     int i=l, k=0, m = l + (h-l)/2, j = m+1;     while(i<=m && j<=h)     {         if(a[i] <= a[j]) temp[k++] = a[i++];         else temp[k++] = a[j++];     }     if(i > m)         for(;k<=h; k++, j++) temp[k] = a[j];     else if(j > h)         for(; k<=h; k++, i++) temp[k] = a[i];     for(i=l, k=0; i<=h; i++,k++) a[i] = temp[k];     return; }  void mergesort(int a[], int l, int h) {    if(h-l<1) return;    int m = l + (h-l)/2;    mergesort(a, l, m);    mergesort(a, m+1, h);    merge(a, l, h);    return; }   int printarr(int a[], int n)  void getarr (int a[], int n)  int main(int argc, char** argv) {      int n, *arr;     scanf("%d", &n);    arr = (int*)malloc(n*sizeof(int));    getarr(arr, n);    mergesort(arr, 0, n-1);    printarr(arr, n);    return 0; } 

Comments

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -