Abdulg

Merge Sort [C]

Oct 11th, 2015
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.53 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void PrintArray(int *Start, int N);
  5. void Merge(int *Array, int *L, int *R, int N);
  6. void MergeSort(int *Array, int N);
  7.  
  8. int main(int argc, char* argv[])
  9. {
  10.         if (argc == 1)
  11.         {
  12.                 printf("Please give me a space seperated list of numbers!\n");
  13.                 return 1;
  14.         }
  15.        
  16.         int *Array = malloc(sizeof(int) * argc--);
  17.         int i;
  18.         for (i = 0; i < argc; i++)
  19.                 Array[i] = atoi(argv[i + 1]);
  20.        
  21.         MergeSort(Array, argc);
  22.         PrintArray(Array, argc);
  23.  
  24.         free(Array);
  25.         return 0;
  26. }
  27.  
  28. void PrintArray(int *Start, int N)
  29. {
  30.         int i;
  31.         for (i = 0; i < N; i++)
  32.                 printf("%d ", Start[i]);
  33.         printf("\n");
  34. }
  35.  
  36. void Merge(int *Array, int *L, int *R, int N)
  37. {
  38.         int i;
  39.         int Li = 0, Ri = 0;
  40.         for (i = 0; i < N; i++)
  41.         {
  42.                 if (L[Li] <= R[Ri] && Li < N / 2)
  43.                         Array[i] = L[Li++];
  44.                 else Array[i] = R[Ri++];
  45.         }
  46. }
  47.  
  48. void MergeSort(int *Array, int N)
  49. {
  50.         if (N == 1) return;
  51.  
  52.         int *L = malloc(sizeof(int) * N / 2);
  53.         int *R = malloc(sizeof(int) * N / 2);
  54.        
  55.         int i;
  56.         for (i = 0; i < N / 2; i++)
  57.                 L[i] = Array[i];
  58.         for (i = 0; i < N / 2; i++)
  59.                 R[i] = Array[i + N / 2];
  60.        
  61.         MergeSort(L, N/2);
  62.         MergeSort(R, N/2);
  63.         Merge(Array, L, R, N);
  64.         free(L);
  65.         free(R);
  66. }
Advertisement
Add Comment
Please, Sign In to add comment