-
-
Save DF-wu/61e0888389e6fb53d5fa51e372ff6433 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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