Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int a[200000] = {0};
- #define SIZE sizeof(a)/sizeof(int)
- int* merge_sort(int* a,int length)
- {
- int* buff = (int*)malloc(sizeof(int)*length);
- int* array = (int*)malloc(sizeof(int)*length);
- memcpy(array,a,length*sizeof(int));
- int i;
- if(length == 1)
- {
- free(buff);
- return array;
- }
- int* tmp;
- int size = 1;
- while(size < length)
- {
- int s;
- int i;
- int j;
- for(s = 0; s <= length/size+1; s += size*2)
- {
- i = s;
- j = s + size;
- int o = s;
- while(!((i >= s + size) &&
- ((j >= s + size*2) || j >= length)
- ))
- {
- if(j >= s + size*2 || j >= length)
- buff[o++] = array[i++];
- else if (i >= s + size)
- buff[o++] = array[j++];
- else if (array[i] > array[j])
- buff[o++] = array[j++];
- else
- buff[o++] = array[i++];
- }
- }
- tmp = buff;
- buff = array;
- array = tmp;
- size *= 2;
- }
- free(buff);
- return array;
- }
- int main()
- {
- int i;
- // for(i= 0; i < SIZE; i ++)
- // printf("%d ",a[i]);
- // printf("\n");
- int* sorted = merge_sort(a,SIZE);
- // for(i= 0; i < SIZE; i ++)
- // printf("%d ",sorted[i]);
- // printf("\n");
- free(sorted);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement