Algortihm: Merge Sort

void merge(int arr[], int beg, int end) {
    int m = (beg+end) /2 ;
    int i = beg , j = m + 1;
    int k = 0;
    int tmp[end-beg + 1];

    while(i <= m && j <= end) {
        if(arr[i] < arr[j]) {
            tmp[k++] = arr[i++];
        } else {
            tmp[k++] = arr[j++];
        }
    }

    while(i <= m) {
        tmp[k++] = arr[i++];
    }

    while(j <= end) {
        tmp[k++] = arr[j++];
    }

    for(int i = 0 ; i < k ; i++) {
        arr[beg+i] = tmp[i];
    }

}

void merge_sort(int arr[] ,int beg , int end) {
    if (beg == end) return;

    int m = (beg + end)  / 2;
    merge_sort(arr, beg, m);
    merge_sort(arr,m+1, end);
    merge(arr,beg,end);
}

void print_array(int *arr , int n) {
    for(int i = 0; i < n ; i++) {
        printf("%d\t",arr[i]);
    }
    printf("\n");
}
 
int main() {


    int arr[]  = {2 , -4 , 5 , 10 , 3 , 6 , -26 , 100 , -3 , -5 , -12};
    merge_sort(arr,0,11);
    print_array(arr, 11);
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *