Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Implementar el algoritmo y probar su rendimiento para un arreglo de 1000, 10000, 100000, 1000000
- /*Para: 1000 = aprox. 1.337 s
- 10000 = aprox. 2.817 s
- 100000 = aprox. 11.370 s
- 1000000 = aprox. 78.910 s */
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define size_max 1000
- void mergeSort(int *arr, int l, int r);
- void mezcla(int *a, int ini, int med, int fin);
- void printarray (int *A, int arr_size);
- int main() {
- int *arr, i;
- srand(time(0));
- arr=(int*)calloc(size_max,sizeof(int));
- int arr_size=size_max;
- printf("\n\t Tamanio del arreglo: %d", arr_size);
- for(i=0; i<arr_size; i++)
- arr[i]=rand()%arr_size;
- printf("\n\t Arreglo inicial: \n");
- printarray(arr, arr_size);
- mergeSort (arr, 0, arr_size-1);
- printf("\n\t Arreglo ordenado: \n", arr_size);
- printarray(arr, arr_size);
- free(arr);
- return 0;
- }
- void printarray (int *A, int size){
- int i;
- for(i=0; i<size; i++)
- printf("%d ", *(A+i));
- printf("\n");
- }
- void mergeSort(int *arr, int l, int r){
- if(l<r){
- int med=l+(r-l)/2;
- mergeSort(arr, l, med);
- mergeSort(arr, med+l, r);
- mezcla (arr, l, med, r);
- }
- }
- void mezcla(int *a, int l, int med, int r){
- int *aux, m;
- aux = malloc(l-(r+l)*sizeof(int));
- int i = l;
- int j = med + l;
- int k = 0;
- while (i <= med && j <= l) {
- if (a[i] < a[j]) {aux[k] = a[i]; i++;}
- else {aux[k] = a[j]; j++;}
- k++;
- }
- while (i <= med ) {aux[k] = a[i]; i++; k++;}
- while (j <= r ) {aux[k] = a[j]; j++; k++;}
- for (m = 0; m < r-l+1; m++) {a[l+m]= aux[m];}
- free(aux);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement