0

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

2
Contributors
1
Reply
3
Views
5 Years
Discussion Span
Last Post by abhimanipal
0

Where is the code breaking ?

Put some log statements to get a better idea of the behavior of your program

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.