Mam problem z działaniem quicksorta.
Przy wyświetlaniu posortowanej tablicy rosnąco nie wyswietla mi ostatniego elementu,
a przy sortowaniu malejąco , nie wyświetla pierwszego.
#include <stdio.h>
int read_vector(int vec[], int size, int stop_value)
{
int val;
printf("Podaj wartosci\n");
scanf("%d",&val);
while(val!=stop_value)
{
vec[size]=val;
size++;
scanf("%d",&val);
}
return size;
}
void quicksort_asc(int l, int r, int tab[]);
void quicksort_desc(int l, int r, int tab[]);
void quicksort(int tab[], int size, int dir)
{
int i;
int l=0;
int r=size;
if(dir==1)
{quicksort_asc(l, r, tab);
for(i=0;i<size;i++)
printf("%d ",tab[i]);
// display_vector(tab, size+1);
}
else if(dir==2){quicksort_desc(l, r, tab);
// display_vector(tab, size);
for(i=0;i<size;i++)
printf("%d ",tab[i]);
// printf("%d",tab[size]);
// printf("%d",size);
}
else printf("Error");
}
void quicksort_asc(int l, int r, int tab[])
{
int temp;
int i = l;
int j = r;
int x = tab[( l + r ) / 2 ];
do
{
while( tab[ i ] < x )
i++;
while( tab[ j ] > x )
j--;
if( i <= j )
{
temp=tab[i];
tab[i]=tab[j];
tab[j]=temp;
i++;
j--;
}
} while( i <= j );
if( l < j ) quicksort_asc(l, j, tab );
if( r > i ) quicksort_asc(i, r, tab );
}
void quicksort_desc(int l, int r, int tab[])
{
int temp;
int i = l;
int j = r;
int x = tab[( l + r ) / 2 ];
do
{
while( tab[ i ] > x )
i++;
while( tab[ j ] < x )
j--;
if( i <= j )
{
temp=tab[i];
tab[i]=tab[j];
tab[j]=temp;
i++;
j--;
}
} while( i <= j );
if( l < j ) quicksort_desc(l, j, tab );
if( r > i ) quicksort_desc(i, r, tab );
//display_vector(tab, r+1);
}
int main() {
int tab[150];
int stop_value=0;
int size=0;
int dir;
size=read_vector(tab, size,stop_value);
printf("Podaj kierunek\n");
scanf("%d",&dir);
quicksort(tab, size, dir);
return 0;
}