Skip to content

Instantly share code, notes, and snippets.

@itolosa
Created November 2, 2016 16:21
Show Gist options
  • Save itolosa/158d34a5f4af3e7849e6406ba011015d to your computer and use it in GitHub Desktop.
Save itolosa/158d34a5f4af3e7849e6406ba011015d to your computer and use it in GitHub Desktop.
a mergesort implementation in c language
#define ARRMAX 100
void merge(int *A, int i, int j)
{
int lk, rk, k;
int mid = (i+j)/2;
int B[j+1];
lk = i;
rk = mid+1;
k = i;
while (lk <= mid && rk <= j)
if (A[lk] <= A[rk])
B[k++] = A[lk++];
else
B[k++] = A[rk++];
while (lk <= mid)
B[k++] = A[lk++];
while (rk <= j)
B[k++] = A[rk++];
for (k = i; k <= j; k++)
A[k] = B[k];
}
void sort(int *A, int i, int j)
{
if (i >= j) return;
int mid = (i+j)/2;
sort(A, i, mid);
sort(A, mid+1, j);
merge(A, i, j);
}
int main(int argc, char **argv) {
int A[ARRMAX];
int i;
// only for example purpose
for (i = 0; i < ARRMAX; i++){
A[ARRMAX-i] = i;
}
sort(A, 0, ARRMAX-1);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment