matheus__serpa icon

asdasd

matheus__serpa | PRO | 05/19/20 09:41:55 PM UTC | 0 ⭐ | 1599 👁️ | Never ⏰ | []
C |

1.04 KB

|

None

|

0 👍

/

0 👎

#include <stdio.h>
#include <stdlib.h>
 
void merge(int *A, int esq, int meio, int dir){
    int *v = (int *) malloc((dir - esq + 1) * sizeof(int));
    int i = esq;
    int j = meio + 1;
    int k = 0;
 
    while(i <= meio && j <= dir){
        if(A[i] < A[j]){
            v[k] = A[i];
            i++;
        }else{
            v[k] = A[j];
            j++;
        }
        k++;
    }
 
    while(i <= meio){
        v[k] = A[i];
        i++;
        k++;
    }
 
    while(j <= dir){
        v[k] = A[j];
        j++;
        k++;
    }
 
    for(i = 0; i < k; i++)
        A[esq + i] = v[i];
}
 
void merge_sort(int *A, int esq, int dir){
    if(esq < dir){
        int meio = (esq + dir) / 2;
        merge_sort(A, esq, meio);
        merge_sort(A, meio + 1, dir);
        merge(A, esq, meio, dir);
    }
}
 
int main(){
    int i, A[5] = {4, 7, 1, 5, 3};
 
    for(i = 0; i < 5; i++)
        printf("%d ", A[i]);
 
    printf("\n");
    merge_sort(A, 0, 4);
 
    for(i = 0; i < 5; i++)
        printf("%d ", A[i]);
}

Comments