News:

Choose a design and let our professionals help you build a successful website   - ITAcumens

Main Menu

RECURSIVE BALANCED QUICK SORT

Started by aruljothi, Mar 31, 2009, 10:48 AM

Previous topic - Next topic

aruljothi

#include<stdio.h>
#include<conio.h>
void qsort(int a[],int,int);
void partition(int a[],int,int,int *);
void print(int *,int);
void swap(int *,int *);

void main()
{
  int a[30],i,n;
  flushall();
   clrscr();
  printf("
enter how many data u want :");
  scanf("%d",&n);

  printf("
enter the data :");
   for(i=0;i<n;i++)
   {
      printf("
%d .",i);
      scanf("%d",&a);
   }
    qsort(a,0,n-1);
    printf("
SORTED DATA:
");
    print(a,n-1);
   getch();
}
void qsort(int a[],int lb,int ub)
{
   int j;
   if(ub>lb)
   {
   partition(a,lb,ub,&j);
   qsort(a,lb,j-2);
   qsort(a,j+2,ub);
   }
}
void partition(int a[],int lb,int ub,int *j)
{

  int mid=(lb+ub)/2,temp,up,down,pivot;
  pivot=a[mid];
  up=ub;
  down=lb;
while(down<up)
{
     while( a[down] <= pivot && down <= ub )
       {
    down++;
    if(a[down]<a[down-1]&&down>lb)
       swap(&a[down],&a[down-1]);
   }
      while(a[up]>pivot)
       {
   up--;
   if(a[up]>a[up+1]&&up<ub)
    swap(&a[up],&a[up+1]);
       }
      if(down<up)
      {
     swap(&a[down],&a[up]);
      if(a[down]<a[down-1]&&down>0)
     swap(&a[down],&a[down-1]);
      if(a[up]>a[up+1]&&up<ub)
     swap(&a[up],&a[up+1]);
      }

}
  for(int i=0;i<ub-1;i++)
    if(a>a[i+1])
      swap(&a,&a[i+1]);
  *j=up;
}
void print(int a[],int n)
{
  for(int i=0;i<=n;i++)
     printf("
%d   .   %d",i,a);
}
void swap(int *p,int *q)
{
  int t;
  t=*p;
  *p=*q;
  *q=t;
}