Wednesday, January 31, 2024

MERGE SORT - DSTC using C Language (Source Code Implemented)

MERGE SORT
Implemented using C Language

// MERGE SORT in C Language

#include <stdlib.h>
#include <stdio.h>
#include <process.h>

#define NUM_ITEMS 10

void mergeSort(int numbers[], int temp[], int array_size);
void m_sort(int numbers[], int temp[], int left, int right);
void merge(int numbers[], int temp[], int left, int mid, int right);
void prnArray(int numbers[], int array_size) ;

int numbers[NUM_ITEMS];
int temp[NUM_ITEMS];

int main()
{
    int i;
    clrscr();

    //seed random number generator
    srand(getpid());

    //fill array with random integers
    for (i = 0; i < NUM_ITEMS; i++)
        numbers[i] = rand();

    printf("\nBefore MERGE Sort.\n");
    prnArray(numbers, NUM_ITEMS) ;
    //perform merge sort on array
    mergeSort(numbers, temp, NUM_ITEMS);

    printf("\nAfter MERGE Sort.\n");
    prnArray(numbers, NUM_ITEMS) ;
}

void mergeSort(int numbers[], int temp[], int array_size)
{
    m_sort(numbers, temp, 0, array_size - 1);
}

void m_sort(int numbers[], int temp[], int left, int right)
{
    int mid;

    if (right > left)
    {
        mid = (right + left) / 2;
        m_sort(numbers, temp, left, mid);
        m_sort(numbers, temp, mid+1, right);

        merge(numbers, temp, left, mid+1, right);
    }
}

void merge(int numbers[], int temp[], int left, int mid, int right)
{
    int i, left_end, num_elements, tmp_pos;

    left_end = mid - 1;
    tmp_pos = left;
    num_elements = right - left + 1;

    while ((left <= left_end) && (mid <= right))
    {
        if (numbers[left] <= numbers[mid])
        {
            temp[tmp_pos] = numbers[left];
            tmp_pos = tmp_pos + 1;
            left = left +1;
        }
else
        {
            temp[tmp_pos] = numbers[mid];
            tmp_pos = tmp_pos + 1;
            mid = mid + 1;
        }
    }

 

    while (left <= left_end)
    {
        temp[tmp_pos] = numbers[left];
        left = left + 1;
        tmp_pos = tmp_pos + 1;
    }
    while (mid <= right)
    {
        temp[tmp_pos] = numbers[mid];
        mid = mid + 1;
        tmp_pos = tmp_pos + 1;
    }

    for (i=0; i <= num_elements; i++)
    {
        numbers[right] = temp[right];
        right = right - 1;
    }
}

void prnArray(int numbers[], int array_size)
{
    int x ;
    for(x=0; x < array_size; x++)
        printf("%d\t", numbers[x]) ;
}

 C Language Code:


MERGE.C

No comments: