**Merge Sort** is a one of the sorting techniques in data structure.

It is a simple technique to sort the element.

Merge is also used for sorting two individual unsorted list to sorted list.

It merge the list.

## Merge sort technique

In this technique we have a N number of unsorted list in this, We divide each element into a separate partition.

First, We divide the whole list into two array then that two array are divided separately and sort the each element after that we merge the partitioned set to one single array. Finally, We will get our sorted array by merge sort technique.

**Algorithm**

- Take a set of number an array.
- Divide the array into equal parts.
- Consider these two parts separately
- Now, Take first part and partition the number until we have only one element left then start combining the each number by comparing and arrange in order.
- For second part also, Partition the each number until one number left then start combining each number by comparing and arranging in order.
- After this, Compare the two sorted array and arrange into a one sorted list.
- Finish

Example:-

**Output :-**

**Sorted list – 3 9 10 27 38 43 82**

In this way we will get the sorted list.

The passes or steps required for implementing merge Sort is N -1.

The time complexity for merge Sort is **O(n log n)** for worst case.

## Advantages of merge sort

- It is very simple and easy sorting technique.
- Works very good for large data.

## Disadvantage of merge sort

- This technique requires extra space for implementation.
- It is less efficient.

## Program

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#include<stdio.h> void mergesort(int a[],int i,int j); void merge(int a[],int i1,int j1,int i2,int j2); int main() { int a[30],n,i; printf("Enter no of elements:"); scanf("%d",&n); printf("Enter array elements:"); for(i=0;i<n;i++) scanf("%d",&a[i]); mergesort(a,0,n-1); printf("\nSorted array is :"); for(i=0;i<n;i++) printf("%d ",a[i]); return 0; } void mergesort(int a[],int i,int j) { int mid; if(i<j) { mid=(i+j)/2; mergesort(a,i,mid); //left recursion mergesort(a,mid+1,j); //right recursion merge(a,i,mid,mid+1,j); //merging of two sorted sub-arrays } } void merge(int a[],int i1,int j1,int i2,int j2) { int temp[50]; //array used for merging int i,j,k; i=i1; //beginning of the first list j=i2; //beginning of the second list k=0; while(i<=j1 && j<=j2) //while elements in both lists { if(a[i]<a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; } while(i<=j1) //copy remaining elements of the first list temp[k++]=a[i++]; while(j<=j2) //copy remaining elements of the second list temp[k++]=a[j++]; //Transfer elements from temp[] back to a[] for(i=i1,j=0;i<=j2;i++,j++) a[i]=temp[j]; } |

**Output of program:**

**Enter number of elements:**

**5**

**Enter array elements**

**10 2 30 4 1**

**Sorted array is: 1 2 4 10 30**

## Leave a Reply