Hello,
I want to sort array by using" the quicksort algorithm"
so here is the code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
void *triHoare (void * arg);
int PivotSelection (int indexStart, int indexEnd);
int Split (int tab[], int pivot, int indexStart, int indexEnd);
int MAXTAB;
struct param
{
int indexStart;
int indexEnd;
int tab[100];
};
int main(void)
{
struct param arg;
int i; pthread_t thred;
int pere;
arg.indexStart= 0;
arg.indexEnd = (MAXTAB-1);
printf("Please input array size : ");
scanf("%d",&MAXTAB);
for(i=0;i<MAXTAB;i++)
{
printf("\n please input tab[%d] :",i);
scanf("%d",&arg.tab[i]);
}
printf("Before sorting : ");
for(i = 0; i < MAXTAB; i++) printf(" %d ",arg.tab[i]);// exit(0);
printf("\n");
if(pthread_create (&thred, NULL,*triHoare,&arg) ==0)
printf (" first thread created ");
else
{
perror("Creation failure");
exit(EXIT_FAILURE);
}
}
int PivotSelection ( int indexStart, int indexEnd)
{ return (indexStart+indexEnd) /2;}
void *triHoare (void * arg){
struct param *p=(struct param*) arg;
struct param arg1,arg2;
pthread_t id_thread;
pthread_t ig_thread;
int pivot = PivotSelection (p->indexStart,p->indexEnd);
int SplitIndex,th1,th2;
SplitIndex = Split(p->tab, pivot,p->indexStart,p->indexEnd);
arg1.indexStart = p->indexStart;
arg1.indexEnd = SplitIndex;
arg1.tab[MAXTAB]= p->tab[MAXTAB];
arg2.indexStart = SplitIndex+1;
arg2.indexEnd = p->indexEnd;
arg2.tab[MAXTAB]= p->tab[MAXTAB];
if(p->indexEnd > p->indexStart)
{
th1= pthread_create (&id_thread, NULL,*triHoare,&arg1);
if (th1 < 0)
{
perror(" creation threadG failure ");
exit(EXIT_FAILURE);
}
th2= pthread_create (&ig_thread, NULL,*triHoare,&arg2);
if (th2 < 0)
{
perror("creation threadD failure");
exit(EXIT_FAILURE);
}
if (pthread_join(id_thread, NULL))
perror("pthread_join");
if (pthread_join(ig_thread, NULL))
perror("pthread_join");
printf("End first thread\n");
return (EXIT_SUCCESS);
}}
int Split (int tab[], int pivot, int i, int j)
{
int right,left;
int valeurPivot= tab[pivot];
int x=0;
left= i;
right= j;
while(left < right)
{
while(( valeurPivot > tab[left])
&& (left < j))
left++;
while(( valeurPivot < tab[right])
&& ( right > i))
right--;
if (left< right) {x= tab[left];tab[left]= tab[ right];tab[right]=x;}
}
if (i==j) {printf("tab[%d]=%d \n",i,tab[i]);}
return ( right);}
after compiling the code ,i've got no error messages, I can just input the array elements , the array can't be sorted
If anyone can help that would be great, thank you