Skip to content

Instantly share code, notes, and snippets.

@Kinjalrk2k
Created February 12, 2019 16:38
Show Gist options
  • Save Kinjalrk2k/64c90669728c1ed9ea884fbfd709d6be to your computer and use it in GitHub Desktop.
Save Kinjalrk2k/64c90669728c1ed9ea884fbfd709d6be to your computer and use it in GitHub Desktop.
merge sort
#include <stdio.h>
#include <malloc.h>
void print(int arr[], int size)
{
int i;
for (i=0; i < size; i++)
printf("%d, ", arr[i]);
printf("\b\b \b\b\n");
}
void merge(int arr[], int l, int mid, int r)
{
int i = l, j = mid+1, k = 0;
int *temp = (int*)malloc((r-l+1) * sizeof(int));
while((i <= mid) && (j <= r)) // iterate over the subarrays
{
if(arr[i] <= arr[j]) // sorting
{
temp[k] = arr[i];
i++;
k++;
}
else
{
temp[k] = arr[j];
j++;
k++;
}
}
// copying rest of the elements(if any left)
while(i <= mid)
{
temp[k] = arr[i];
k += 1; i += 1;
}
while(j <= r)
{
temp[k] = arr[j];
k += 1; j += 1;
}
// copying the temp sorted part into the proper position in arr
int m, t=0;
for(m=l; m<=r; m++, t++)
arr[m] = temp[t];
}
void merge_sort(int arr[], int l, int r)
{
if(r <= l) // terminating condition
return;
int mid = (l + r) / 2; // mid element index
merge_sort(arr, l, mid); // divide the left half
merge_sort(arr, mid+1, r); // divide the right half
merge(arr, l, mid, r); // conquer
}
int main(int argc, char const *argv[])
{
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr)/sizeof(arr[0]);
merge_sort(arr, 0, n-1);
printf("Sorted array: \n");
print(arr, n);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment