Advertisement
Mazamin

mergeSort

Nov 18th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.23 KB | None | 0 0
  1. /*
  2.  * File:   main.c
  3.  * Author: Gerardo Cicalese
  4.  *
  5.  * Created on 18 novembre 2019, 14.22
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <time.h>
  11.  
  12. void merge(int *, int, int *, int, int *);
  13. void mergeSort(int *, int, int *);
  14.  
  15. int main(void)
  16. {
  17.     srand(time(NULL));
  18.     int array[10], temp[10];
  19.    
  20.     for(int i=0; i<10; ++i)
  21.         array[i] = rand()%100;
  22.    
  23.     mergeSort(array, 10, temp);
  24.    
  25.     for(int i=0; i<10; ++i)
  26.         printf("%d\t", array[i]);
  27.    
  28.     return 0;
  29. }
  30.  
  31. void merge(int * a, int na, int * b, int nb, int * c)
  32. {
  33.     while(na > 0 && nb > 0)
  34.         if(*a < *b)
  35.         {
  36.             *(c++) = *(a++);
  37.             --na;
  38.         }
  39.         else
  40.         {
  41.             *(c++) = *(b++);
  42.             --nb;
  43.         }
  44.    
  45.     while(na > 0)
  46.     {
  47.         *(c++) = *(a++);
  48.         --na;
  49.     }
  50.    
  51.     while(nb > 0)
  52.     {
  53.         *(c++) = *(b++);
  54.         --nb;
  55.     }
  56. }
  57.  
  58. void mergeSort(int * array, int len, int * temp)
  59. {
  60.     if(len <= 1)
  61.         return;
  62.    
  63.     int m = len/2;
  64.    
  65.     mergeSort(array, m, temp);
  66.     mergeSort(array+m, len-m, temp);
  67.    
  68.     merge(array, m, array+m, len-m, temp);
  69.    
  70.     for(int i=0; i<len; ++i)
  71.         array[i] = temp[i];
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement