Sunday, January 13, 2013

SORTING ALGORITHM IN C

BUBBLE SORT 


#include <stdio.h>

int main()
{
  int array[100], n, c, d, swap;

  printf("Enter number of elements\n");
  scanf("%d", &n);

  printf("Enter %d integers\n", n);

  for (c = 0; c < n; c++)
    scanf("%d", &array[c]);

  for (c = 0 ; c < ( n - 1 ); c++)
  {
    for (d = 0 ; d < n - c - 1; d++)
    {
      if (array[d] > array[d+1]) /* For decreasing order use < */
      {
        swap       = array[d];
        array[d]   = array[d+1];
        array[d+1] = swap;
      }
    }
  }

  printf("Sorted list in ascending order:\n");

  for ( c = 0 ; c < n ; c++ )
     printf("%d\n", array[c]);

  return 0;
}



SELECTION SORT


#include<stdio.h>

main()
{
   int array[100], n, c, d, position, swap;

   printf("Enter number of elements\n");
   scanf("%d", &n);

   printf("Enter %d integers\n", n);

   for ( c = 0 ; c < n ; c++ )
      scanf("%d", &array[c]);

   for ( c = 0 ; c < ( n - 1 ) ; c++ )
   {
      position = c;

      for ( d = c + 1 ; d < n ; d++ )
      {
         if ( array[position] > array[d] )
            position = d;
      }
      if ( position != c )
      {
         swap = array[c];
         array[c] = array[position];
         array[position] = swap;
      }
   }

   printf("Sorted list in ascending order:\n");

   for ( c = 0 ; c < n ; c++ )
      printf("%d\n", array[c]);

   return 0;
}


INSERTION SORT


/* insertion sort ascending order */

#include <stdio.h>

int main()
{
  int n, array[1000], c, d, t;

  printf("Enter number of elements\n");
  scanf("%d", &n);

  printf("Enter %d integers\n", n);

  for (c = 0; c < n; c++) {
    scanf("%d", &array[c]);
  }

  for (c = 1 ; c <= n - 1; c++) {
    d = c;

    while ( d > 0 && array[d] < array[d-1]) {
      t          = array[d];
      array[d]   = array[d-1];
      array[d-1] = t;

      d--;
    }
  }

  printf("Sorted list in ascending order:\n");

  for (c = 0; c <= n - 1; c++) {
    printf("%d\n", array[c]);
  }

  return 0;
}


MERGE SORT


#include<stdio.h>
#define MAX 100
void mergesort(int list[],int lb,int ub);
void merge(int list[],int lb,int mid,int ub);
int main()
{
    int list[MAX];
    int i,size,mid;
    printf("\n ENTER THE SIZE OF THE LIST=");
    scanf("%d",&size);
    printf("\n ENTER THE LIST ONE BY ONE\n");
    for(i=0;i<size;i++)
    {
        scanf("%d ",&list[i]);
    }
    mergesort(list,0,size-1);
    printf("\n THE SORTED LIST IS ....");
    for(i=0;i<size;i++)
    {
        printf("%d ",list[i]);
    }
    return 0;
}
void mergesort(int list[],int lb,int ub)
{
    int mid;
    if(lb<ub)
    {
        mid=(lb+ub)/2;
        mergesort(list,lb,mid);
        mergesort(list,mid+1,ub);
        merge(list,lb,mid+1,ub);
    }
}
void merge(int list[],int lb,int mid,int ub)
{
    int mergelist[MAX];
    int ptr1,ptr2,ptr3;
    int i;
    ptr1=lb;
    ptr2=mid;
    ptr3=lb;
    //printf("%d %d ",ptr1,ptr2);
    while(ptr1<mid&&ptr2<=ub)
    {
        if(list[ptr1]<=list[ptr2])
        {
            mergelist[ptr3]=list[ptr1];
            ptr1++;
            ptr3++;
        }
        else
        {
            mergelist[ptr3]=list[ptr2];
            ptr2++;
            ptr3++;
        }
        
    }
    while(ptr1<mid)
    {
        mergelist[ptr3]=list[ptr1];
        ptr1++;
        ptr3++;
    }
    while(ptr2<=ub)
    {
        mergelist[ptr3]=list[ptr2];
        ptr2++;
        ptr3++;
    }
    for(i=lb;i<ptr3;i++)
    {
        list[i]=mergelist[i];
    }
}


QUICK SORT


#include<stdio.h>
#define MAX 100
void partition(int key,int list[],int lb,int ub);
void quicksort(int list[],int lb,int ub);
int main()
{
    int list[MAX];
    int i,size,pos,temp;
    int lb,ub;
    printf("\nENTER THE SIZE OF THE LIST=");
    scanf("%d",&size);
    printf("\nENTER THE LIST ONE BY ONE=");
    for(i=0;i<size;i++)
    {
        scanf("%d ",&list[i]);
    }
    quicksort(list,0,size-1);
    //print the sorted list
    printf("THE SORTED LIST IS...\n");
    for(i=0;i<size;i++)
    {
        printf("%d ",list[i]);
    }
    return 0;
}
void quicksort(int list[],int lb,int ub)
{
    int key;
    key=list[lb]; lb++;
    partition(key,list,lb,ub);

}
void partition(int key,int list[],int lb,int ub)
{
    int i,j,temp;
    i=lb;
    j=ub;
    while(i<=j)
    {
        while(list[i]<=key)
        i++;
        while(list[j]>key)
        j--;
        if(i<=j)
        {
            temp=list[i];
            list[i]=list[j];
            list[j]=temp;
        }
    }
    temp=list[j];
    list[j]=list[lb-1];
    list[lb-1]=temp;
    if(j>lb)
        quicksort(list,lb,j-1);
    if(j>ub)
        quicksort(list,j+1,ub);
}


SHELL SORT

#include<stdio.h>
#define MAX 100
int main()
{
    int n,i,j,gap,X;
    int arr[MAX];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d ",&arr[i]);
    }
    gap=n/2;
    while(gap)
    {
        for(i=gap;i<n;i++)
        {
            X=arr[i];
            for(j=i-gap;j>=0&&arr[j]>X;j-=gap)
            {
                arr[j+gap]=arr[j];
            }
            arr[j+gap]=X;
        }
        gap=gap/2;
    }
    printf("\n");
    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
}





No comments:

Post a Comment