Data Structure : Sorting Algorithms Using C and C++

Data Structure : Sorting Algorithms Using C and C++


Algorithms :

  1. Bubble Sort
  2. Selection Sort
  3. Insertion Sort
  4. Quick Sort
  5. Merge Sort
  6. Heap Sort

Q1. Bubble Sort Algorithm.

Ans. Using C

// c program for bubble sort
#include<stdio.h>
#include<conio.h>

void bubble_sort(int *,int);
void display(int *,int);

int main()
{
    int arr[10],n,i;
    printf("\n\t\t\t\t\t[ BUBBLE SORTING ]\n");
    printf("\n Type limit >>| ");
    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
        printf("\tElement %d >>| ",i+1);
        scanf("%d",&arr[i]);
    }

    printf("\n Before sorting.... >> ");
    display(arr,n);
    bubble_sort(arr,n);
    printf("\n\n After  sorting.... >> ");
    display(arr,n);

    getch();
    return 0;
}

void bubble_sort(int arr[],int n)
{
    int i,j,temp;

    for(i=1;i<n;i++)
    {
        for(j=0;j<n-i;j++)
        {
            if(arr[j] > arr[j+1])
            {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}

void display(int arr[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf(" %d",arr[i]);
    }
}

Ans. Using C++

// cpp program for bubble sort
#include<iostream>
#include<conio.h>
using namespace std;

void bubble_sort(int *,int);
void display(int *,int);

int main()
{
    int arr[100],n;

    cout<<"\n\t\t\t\t\t[ BUBBLE SORTING ]\n";
    cout<<"\n Enter limit >>| ";
    cin>>n;

    for(int i=0;i<n;i++)
    {
        cout<<"\tElement "<<i+1<<" >>| ";
        cin>>arr[i];
    }

    cout<<"\n Before sorting.... >> ";
    display(arr,n);
    bubble_sort(arr,n);
    cout<<"\n\n After sorting.... >> ";
    display(arr,n);

    getch();
    return 0;
}

void bubble_sort(int arr[],int n)
{
    for(int i=1;i<n;i++)
    {
        for(int j=0;j<n-i;j++)
        {
            int temp;
            if(arr[j] > arr[j+1])
            {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}

void display(int arr[],int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<" "<<arr[i];
    }
}

Try and run :

// Try and run.


Q2. Selection Sort Algorithm.

Ans. Using C

// c program for selection sort
#include<stdio.h>
#include<conio.h>

void display(int *,int);
void selection_sort(int *,int);

int main()
{
    int n,ele[10],i;

    printf("\n\t\t\t\t\t[ SELECTION SORTING ]\n");
    printf("\n Enter array limit >>| ");
    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
        printf("\tEnter element %d >>| ",i+1);
        scanf("%d",&ele[i]);
    }

    printf("\n Before Sorting... ");
    display(ele,n);

    selection_sort(ele,n);

    printf("\n After  Sorting... ");
    display(ele,n);

    getch();
    return 0;
}

void display(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf(" %d",a[i]);
    }
}

void selection_sort(int a[],int n)
{
    int temp,i,j;

    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[i]>a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}

Ans. Using C++

// cpp program for selection sort
#include<iostream>
#include<conio.h>
using namespace std;

void display(int *,int);
void selection_sort(int *,int);

int main()
{
    int n,ele[10];

    cout<<"\n\t\t\t\t\t[ SELECTION SORTING ]\n";
    cout<<"\n Enter limit of elements >>| ";
    cin>>n;

    for(int i=0;i<n;i++)
    {
        cout<<" Enter element "<<i+1<<" >>| ";
        cin>>ele[i];
    }

    cout<<"\n Before Sorting..."<<endl;
    display(ele,n);

    selection_sort(ele,n);

    cout<<"\n After Sorting..."<<endl;
    display(ele,n);

    getch();
    return 0;
}

void display(int a[],int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<" "<<a[i];
    }
}

void selection_sort(int a[],int n)
{
    int temp;

    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(a[i]>a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}

Try and run :

// Try and run.


Q3. Insertion Sort Algorithm.

Ans. Using C

// c program for insertion sort
#include<stdio.h>
#include<conio.h>

void insertion_sort(int *,int);
void display(int *,int);

int main()
{
    int n,ele[10],i;
    printf("\n\t\t\t\t\t[ INSERTION SORT ]\n");
    printf(" Enter limit >>| ");
    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
        printf("\tEnter element %d >>| ",i+1);
        scanf("%d",&ele[i]);
    }

    printf("\n\n Before Sorting >>| ");
    display(ele,n);

    insertion_sort(ele,n);

    printf("\n After  Sorting >>| ");
    display(ele,n);

    getch();
    return 0;
}

void insertion_sort(int *a,int n)
{
    int key,j,i;

    for(i=1;i<n;i++)
    {
        key=a[i];
        j=i-1;
        while((a[j] > key)&&(j > -1))
        {
            a[j+1] = a[j];
            j--;
        }
        a[j+1]=key;
    }
}

void display(int *a,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%d,",a[i]);
    }
}

Ans. Using C++

// cpp program for insertion sort
#include<iostream>
#include<conio.h>
using namespace std;

void insertion_sort(int *,int);
void display(int *,int);

int main()
{
    int n,ele[10];
    cout<<"\n\t\t\t\t\t[ INSERTION SORT ]\n";
    cout<<" Enter limit >>| ";
    cin>>n;
    
    for(int i=0;i<n;i++)
    {
        cout<<"\tEnter element "<<i+1<<" >>| ";
        cin>>ele[i];
    }
    
    cout<<"\n\n Before Sorting >>| ";
    display(ele,n);
    
    insertion_sort(ele,n);
    
    cout<<"\n After  Sorting >>| ";
    display(ele,n);
    
    getch();
    return 0;
}

void insertion_sort(int *a,int n)
{
    int key,j;
    
    for(int i=1;i<n;i++)
    {
        key=a[i];
        j=i-1;
        while((a[j] > key)&&(j > -1))
        {
            a[j+1] = a[j];
            j--;
        }
        a[j+1]=key;
    }
}

void display(int *a,int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<",";
    }
}

Try and run :

// Try and run.


Q4. Quick Sort Algorithm.

Ans. Using C

// c program for quick sort

#include <stdio.h>
#include <conio.h>

int partition (int arr[],int low,int high) 
{
    int temp, pivot=arr[high], i=(low - 1),j;
  
    for (j = low; j < high; j++) 
    {
        if (arr[j] < pivot) 
        { 
            i++;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        } 
    }
    temp = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = temp;
    return (i+1); 


void quickSort(int arr[],int low,int high) 
{
    int pi;
    if(low<high) 
    {
        pi = partition(arr, low, high); 
        quickSort(arr, low, pi - 1); 
        quickSort(arr, pi + 1, high); 
    }



void display(int arr[],int n) 
{
    int i;
    for (i=0;i<n;i++)
        printf("%d,",arr[i]);


int main() 

    int a[10], n=10, i;
    
    printf("\n\t\t\t\t\t[ Quick Sort ]\n");
    printf("\n Enter 10 elements >>| ");
    for(i=0;i<n;i++)
    {
    scanf("%d",&a[i]);
  }
    
    printf("\n Before sorting : ");
    display(a,n);
    quickSort(a, 0, n - 1);
    printf("\n After  sorting : ");
    display(a, n);
    
    getch();
    return 0;
}

Ans. Using C++

// cpp program for quick sort

#include <iostream>
#include <conio.h>
using namespace std; 

int partition (int arr[],int low,int high) 
{
    int temp, pivot=arr[high], i=(low - 1);
  
    for (int j = low; j < high; j++) 
    {
        if (arr[j] < pivot) 
        { 
            i++;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        } 
    }
    temp = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = temp;
    return (i+1); 


void quickSort(int arr[],int low,int high) 
{
    if(low<high) 
    {
        int pi = partition(arr, low, high); 
        quickSort(arr, low, pi - 1); 
        quickSort(arr, pi + 1, high); 
    }


void display(int arr[],int n) 

    for (int i=0;i<n;i++)
        cout<<arr[i]<<",";


int main() 

    int a[10], n=10;
    
    cout<<"\n\t\t\t\t\t[ Quick Sort ]\n";
    cout<<"\n Enter 10 elements >>| ";
    for(int i=0;i<n;i++)
    {
    cin>>a[i];
    }
    
    cout<<"\n Before sorting : ";
    display(a,n);
    quickSort(a, 0, n - 1);
    cout<<"\n After  sorting : ";
    display(a, n);
    
    getch();
    return 0;
}

Try and run :

// Try and run.

Q5. Merge Sort Algorithm.

Ans. Using C

// C program for Merge Sort
#include <stdio.h>
#include <conio.h>
  
void merge(int arr[], int const l, int const mid, int const r)
{
    int const subArr1 = mid - l + 1;
    int const subArr2 = r - mid;
    int lArr[subArr1], rArr[subArr2];
    int i,j;
    int indexArr1 = 0, indexArr2 = 0;
    int indexMergeArr = l;
  
    for (i = 0; i < subArr1; i++)
        lArr[i] = arr[l + i];
        
    for (j = 0; j < subArr2; j++)
        rArr[j] = arr[mid + 1 + j];
  
    while (indexArr1 < subArr1 && indexArr2 < subArr2) {
        if (lArr[indexArr1] <= rArr[indexArr2])
{
            arr[indexMergeArr] = lArr[indexArr1];
            indexArr1++;
        }
        else
{
            arr[indexMergeArr] = rArr[indexArr2];
            indexArr2++;
        }
        indexMergeArr++;
    }
    
    while (indexArr1 < subArr1)
    {
        arr[indexMergeArr] = lArr[indexArr1];
        indexArr1++;
        indexMergeArr++;
    }
    
    while (indexArr2 < subArr2)
    {
        arr[indexMergeArr] = rArr[indexArr2];
        indexArr2++;
        indexMergeArr++;
    }
}
  
void mergeSort(int arr[], int const begin, int const end)
{
    int mid;
    if (begin >= end)
        return;
  
    mid = begin + (end - begin) / 2;
    mergeSort(arr, begin, mid);
    mergeSort(arr, mid + 1, end);
    merge(arr, begin, mid, end);
}
  
void display(int a[], int n)
{
    int i;
    for (i = 0; i < n; i++)
        printf("%d ",a[i]);
}
  
int main()
{
    int arr[] = { 12, 11, 13, 5, 6, 7 }, n=6;
  
    printf("Given array is : ");
    display(arr, n);
  
    mergeSort(arr, 0, n - 1);
  
    printf("\nSorted array is : ");
    display(arr, n);
    
    getch();
    return 0;
}

Ans. Using C++

// Cpp program for Merge Sort
#include <iostream>
#include <conio.h>
using namespace std;
  
void merge(int arr[], int const l, int const mid, int const r)
{
    int const subArr1 = mid - l + 1;
    int const subArr2 = r - mid;
  
    auto *lArr = new int[subArr1], *rArr = new int[subArr2];
  
    for (int i = 0; i < subArr1; i++)
        lArr[i] = arr[l + i];
        
    for (int j = 0; j < subArr2; j++)
        rArr[j] = arr[mid + 1 + j];
  
    int indexArr1 = 0, indexArr2 = 0;
    int indexMergeArr = l;
  
    while (indexArr1 < subArr1 && indexArr2 < subArr2) {
        if (lArr[indexArr1] <= rArr[indexArr2])
{
            arr[indexMergeArr] = lArr[indexArr1];
            indexArr1++;
        }
        else
{
            arr[indexMergeArr] = rArr[indexArr2];
            indexArr2++;
        }
        indexMergeArr++;
    }
    
    while (indexArr1 < subArr1)
    {
        arr[indexMergeArr] = lArr[indexArr1];
        indexArr1++;
        indexMergeArr++;
    }
    
    while (indexArr2 < subArr2)
    {
        arr[indexMergeArr] = rArr[indexArr2];
        indexArr2++;
        indexMergeArr++;
    }
}
  
void mergeSort(int arr[], int const begin, int const end)
{
    if (begin >= end)
        return;
  
    int mid = begin + (end - begin) / 2;
    mergeSort(arr, begin, mid);
    mergeSort(arr, mid + 1, end);
    merge(arr, begin, mid, end);
}
  
void display(int a[], int n)
{
    for (int i = 0; i < n; i++)
        cout << a[i] << " ";
}
  
int main()
{
    int arr[] = { 12, 11, 13, 5, 6, 7 }, n=6;
  
    cout << "Given array is : ";
    display(arr, n);
  
    mergeSort(arr, 0, n - 1);
  
    cout << "\nSorted array is : ";
    display(arr, n);
    
    getch();
    return 0;
}

Try and run :

// Try and run.

Q6. Heap Sort Algorithm.

Ans. Using C

// c program for heap sort

#include<stdio.h>
#include<conio.h>

void display(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}

void heapify(int a[],int n,int i)
{
    int parent=i;
    int l=2*i+1;
    int r=2*i+2;
    int temp;

    if(l<n && a[l]>a[parent])
    {
        parent=l;
    }

    if(r<n && a[r]>a[parent])
    {
        parent=r;
    }

    if(parent != i)
    {
        temp=a[i];
        a[i]=a[parent];
        a[parent]=temp;

        heapify(a,n,parent);
    }
}

void heap_sort(int a[],int n)
{
    int i,temp;

    for(i=n/2-1;i>-1;i--)
    {
        heapify(a,n,i);
    }

    for(i=n-1;i>0;i--)
    {
        temp=a[0];
        a[0]=a[i];
        a[i]=temp; 

        heapify(a,i,0);
    }
}

int main()
{
    int a[100]={2,10,5,6,9,3,8,4,52,50},n=10;

    printf(" Before sorting : ");
    display(a,n);

    heap_sort(a,n);

    printf("\n After  sorting : ");
    display(a,n);

    getch();
    return 0;
}

Ans. Using C++

// cpp program for heap sort

#include<iostream>
#include<conio.h>
using namespace std;

void display(int a[],int n)
{
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
}

void heapify(int a[],int n,int i)
{
    int parent=i;
    int l=2*i+1;
    int r=2*i+2;

    if(l<n && a[l]>a[parent])
    {
        parent=l;
    }

    if(r<n && a[r]>a[parent])
    {
        parent=r;
    }

    if(parent != i)
    {
        int temp=a[i];
        a[i]=a[parent];
        a[parent]=temp;

        heapify(a,n,parent);
    }
}

void heap_sort(int a[],int n)
{
    for(int i=n/2-1;i>-1;i--)
    {
        heapify(a,n,i);
    }

    for(int i=n-1;i>0;i--)
    {
        int temp=a[0];
        a[0]=a[i];
        a[i]=temp; 

        heapify(a,i,0);
    }
}

int main()
{
    int a[100]={2,10,5,6,9,3,8,4,52,50},n=10;

    cout<<" Before sorting : ";
    display(a,n);

    heap_sort(a,n);

    cout<<"\n After  sorting : ";
    display(a,n);

    getch();
    return 0;
}

Try and run :

For i = 2 Down To 1,    a[] = 2 10 5 6 9

For i = 2:
        Heapify: limit = 5, i = 2               a[] = 2 10 5 6 9
                Parent = 2, left_child = 4, right_child = 5                     a[] = 2 10 5 6 9

For i = 1:
        Heapify: limit = 5, i = 1               a[] = 2 10 5 6 9
                Parent = 1, left_child = 2, right_child = 3                     a[] = 2 10 5 6 9
                New: Parent = 2, Assign with left_child = 2                     a[] = 2 10 5 6 9
                Swap: a[i] = 2 To a[Parent] = 10, where i = 1 To Parent = 2     a[] = 2 10 5 6 9
                Heapify: limit = 5      Parent = 2                                      a[] = 10 2 5 6 9
                        Parent = 2, left_child = 4, right_child = 5                     a[] = 10 2 5 6 9
                        New: Parent = 4, Assign with left_child = 4                     a[] = 10 2 5 6 9
                        New: Parent = 5, Assign with right_child = 5                    a[] = 10 2 5 6 9
                        Swap: a[i] = 2 To a[Parent] = 9, where i = 2 To Parent = 5      a[] = 10 2 5 6 9
                        Heapify: limit = 5      Parent = 5                                      a[] = 10 9 5 6 2
                                Parent = 5, left_child = 10, right_child = 11                   a[] = 10 9 5 6 2

For i = 5 Down To 2,    a[] = 10 9 5 6 2

For i = 5:
        Swap: a[1] = 10 To a[i] = 2     a[] = 10 9 5 6 2
        Heapify: limit = 5, i = 1       a[] = 2 9 5 6 10
                Parent = 1, left_child = 2, right_child = 3                     a[] = 2 9 5 6 10
                New: Parent = 2, Assign with left_child = 2                     a[] = 2 9 5 6 10
                Swap: a[i] = 2 To a[Parent] = 9, where i = 1 To Parent = 2      a[] = 2 9 5 6 10
                Heapify: limit = 4      Parent = 2                                      a[] = 9 2 5 6 10
                        Parent = 2, left_child = 4, right_child = 5                     a[] = 9 2 5 6 10
                        New: Parent = 4, Assign with left_child = 4                     a[] = 9 2 5 6 10
                        Swap: a[i] = 2 To a[Parent] = 6, where i = 2 To Parent = 4      a[] = 9 2 5 6 10
                        Heapify: limit = 4      Parent = 4                                      a[] = 9 6 5 2 10
                                Parent = 4, left_child = 8, right_child = 9                     a[] = 9 6 5 2 10

For i = 4:
        Swap: a[1] = 9 To a[i] = 2      a[] = 9 6 5 2 10
        Heapify: limit = 4, i = 1       a[] = 2 6 5 9 10
                Parent = 1, left_child = 2, right_child = 3                     a[] = 2 6 5 9 10
                New: Parent = 2, Assign with left_child = 2                     a[] = 2 6 5 9 10
                Swap: a[i] = 2 To a[Parent] = 6, where i = 1 To Parent = 2      a[] = 2 6 5 9 10
                Heapify: limit = 3      Parent = 2                                      a[] = 6 2 5 9 10
                        Parent = 2, left_child = 4, right_child = 5                     a[] = 6 2 5 9 10

For i = 3:
        Swap: a[1] = 6 To a[i] = 5      a[] = 6 2 5 9 10
        Heapify: limit = 3, i = 1       a[] = 5 2 6 9 10
                Parent = 1, left_child = 2, right_child = 3                     a[] = 5 2 6 9 10

For i = 2:
        Swap: a[1] = 5 To a[i] = 2      a[] = 5 2 6 9 10
        Heapify: limit = 2, i = 1       a[] = 2 5 6 9 10
                Parent = 1, left_child = 2, right_child = 3                     a[] = 2 5 6 9 10
Reactions

Post a Comment

0 Comments