Advertisement
Jorge_Lugo97

Función mergeSort

Nov 17th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.82 KB | None | 0 0
  1. //Implementar el algoritmo y probar su rendimiento para un arreglo de 1000, 10000, 100000, 1000000
  2. /*Para: 1000 = aprox. 1.337 s
  3.         10000 = aprox. 2.817 s
  4.         100000 = aprox. 11.370 s
  5.         1000000 = aprox. 78.910 s */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <time.h>
  10. #define size_max 1000
  11.  
  12. void mergeSort(int *arr, int l, int r);
  13. void mezcla(int *a, int ini, int med, int fin);
  14. void printarray (int *A, int arr_size);
  15.  
  16. int main() {
  17.    
  18.     int *arr, i;
  19.     srand(time(0));
  20.     arr=(int*)calloc(size_max,sizeof(int));
  21.     int arr_size=size_max;
  22.     printf("\n\t Tamanio del arreglo: %d", arr_size);
  23.    
  24.     for(i=0; i<arr_size; i++)
  25.     arr[i]=rand()%arr_size;
  26.     printf("\n\t Arreglo inicial: \n");
  27.     printarray(arr, arr_size);
  28.    
  29.     mergeSort (arr, 0, arr_size-1);
  30.    
  31.     printf("\n\t Arreglo ordenado: \n", arr_size);
  32.     printarray(arr, arr_size);
  33.     free(arr);
  34.    
  35.     return 0;
  36. }
  37.  
  38. void printarray (int *A, int size){
  39.    
  40.     int i;
  41.     for(i=0; i<size; i++)
  42.         printf("%d ", *(A+i));
  43.         printf("\n");
  44. }
  45.  
  46.  
  47. void mergeSort(int *arr, int l, int r){
  48.     if(l<r){
  49.         int med=l+(r-l)/2;
  50.             mergeSort(arr, l, med);
  51.             mergeSort(arr, med+l, r);
  52.             mezcla (arr, l, med, r);
  53.         }  
  54. }
  55.  
  56. void mezcla(int *a, int l, int med, int r){
  57.     int *aux, m;
  58.     aux = malloc(l-(r+l)*sizeof(int));
  59.     int i = l;
  60.     int j = med + l;
  61.     int k = 0;
  62.        
  63.         while (i <= med && j <= l) {
  64.                     if (a[i] < a[j]) {aux[k] = a[i]; i++;}
  65.                         else {aux[k] = a[j]; j++;}
  66.                         k++;
  67.         }
  68.        
  69.         while (i <= med ) {aux[k] = a[i]; i++; k++;}
  70.             while (j <= r ) {aux[k] = a[j]; j++; k++;}
  71.                 for (m = 0; m < r-l+1; m++) {a[l+m]= aux[m];}
  72.                 free(aux);
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement