Skip to content

Instantly share code, notes, and snippets.

@barthr
Created May 6, 2017 15:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save barthr/92f604ef606c11d1547870cef2ca9150 to your computer and use it in GitHub Desktop.
Save barthr/92f604ef606c11d1547870cef2ca9150 to your computer and use it in GitHub Desktop.
Merge sort in C
#include <stdio.h>
#include <stdlib.h>
void merge(int *c, int *left, int *right, size_t leftL, size_t rightL)
{
int i = 0;
int j = 0;
int k = 0;
while (i < leftL && j < rightL)
{
if (left[i] < right[j])
c[k++] = left[i++];
else
c[k++] = right[j++];
}
while (i < leftL)
c[k++] = left[i++];
while (j < rightL)
c[k++] = right[j++];
}
void mergesortnew(int *arr, size_t length)
{
if (length == 1)
{
return;
}
int middle = length / 2;
int *left = calloc(middle, sizeof(int));
int *right = calloc(length - middle, sizeof(int));
for (int i = 0; i < middle; i++)
left[i] = arr[i];
for (int i = middle; i < length; i++)
right[i - middle] = arr[i];
mergesortnew(left, middle);
mergesortnew(right, length - middle);
merge(arr, left, right, middle, length - middle);
free(left);
free(right);
}
int main()
{
int items[] = {4, 3, 7, 9};
size_t length = sizeof(items) / sizeof(items[0]);
mergesortnew(items, length);
for (int i = 0; i < length; i++)
{
printf("%d\n", items[i]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment