Skip to content

Instantly share code, notes, and snippets.

@DF-wu
Created October 15, 2017 02:37
Show Gist options
  • Save DF-wu/61e0888389e6fb53d5fa51e372ff6433 to your computer and use it in GitHub Desktop.
Save DF-wu/61e0888389e6fb53d5fa51e372ff6433 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#pragma warning( disable : 4996 )
/* i wrote
int divide(int all, int *arr,int len_front, int len_rear)
{
int i,k,t;
int mid = all / 2 ; //find mid
//for(int tmp=0;tmp<all;tmp++) printf("QQ %d QQ\n", arr[tmp]);
int *l_arr = (int*)malloc(sizeof(int) * (mid + 1) );
int *r_arr = (int*)malloc(sizeof(int) * (mid + 1) );
for(i=1; i< (mid +1) ;i++)
{
l_arr[i] = arr[i];
printf("front %d\n",arr[i]);
}
for(i = mid +1 ; i < all - 1; i++)
{
r_arr[i] = arr[i];
printf("rear %d\n",arr[i]);
}
len_rear = (all -1 - mid -1);
len_front = (mid +1 - 1);
if(len_front != 1) {
divide(mid, l_arr, len_front, len_rear);
divide(mid, r_arr, len_front, len_rear);
}
else
{
printf("OMG plz \n");
}
free(l_arr);
free(r_arr);
return 0;
}
*/
int divide(int *arr, int front, int mid ,int rear)
{
int i,k,t;
int len_front = mid - front +1;
int len_rear = rear - mid ;
int *l_arr = (int *)malloc(sizeof(int ) * (front +1)); // +1 because start form 0
int *r_arr = (int *)malloc(sizeof(int ) * (len_rear));
for(i=1; i<len_front +1; i++)
{
l_arr[i] = arr[front + i -1];
}
for(k=1; k<len_rear +1; k++)
{
r_arr[k] = arr[mid + k];
}
l_arr[len_front +1] = INT_MAX; r_arr[len_rear +1] = INT_MAX;
i = k =1;
for(t = front; t < rear +1; t++)
{
if( l_arr[i] <= r_arr[k] )
{
arr[t] = l_arr[i];
i++;
}
else
{
arr[t] = r_arr[k];
k++;
}
}
}
int merge_sort(int *arr, int front, int rear)
{
int mid;
if (front < rear)
{
mid = (front + rear) / 2;
merge_sort(arr, front, mid);
merge_sort(arr, front + 1, rear);
divide(arr, front, mid, rear);
}
}
int main()
{
int counter = 1;
int *dyarr = (int*)malloc(sizeof(int) *50010);
int i;
while(scanf("%d", &dyarr[counter++]) != EOF);
merge_sort(dyarr, 1, counter);
for (i = 0; i < counter+1; i++)
{
printf("%d\n", dyarr[i]);
}
free(dyarr);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment