C Program Sort Array By Segment

How to write a C Program Sort Array By Segment in C Programming Language ?

This C Program Sort Array By Segment.

Solution:

  1.     #include <stdio.h>
  2.     #include <string.h>
  3.     #include <stdlib.h>
  4.     #include <pthread.h>
  5.      
  6.     struct SortParameters{
  7.             int *arr;
  8.             int begin;
  9.             int end;
  10.     };
  11.      
  12.      
  13.      
  14.      
  15.     void buildRandomArray(int *arr,int size);
  16.     void * sortArrayBySegment(void * params);
  17.     void printArray(int *arr,int size);
  18.     void Merge(int *A,int *L,int leftCount,int *R,int rightCount);
  19.     void MergeSort(int *A,int n);
  20.    
  21.     int main(){
  22.      
  23.              int size=0;
  24.              int cantH=0;
  25.         printf("Ingresar size del arreglo\n");
  26.         scanf("%d", &size);
  27.         printf("Ingresar cant de hilos\n");
  28.         scanf("%d", &cantH);
  29.         if(size % cantH != 0){
  30.           printf("%d no es divisible entre %d\n",size,cantH);
  31.           return -1;
  32.         }
  33.         int *arr=(int *)malloc(sizeof(int)*size);
  34.         buildRandomArray(arr,size);
  35.         int divsize = size / cantH;
  36.         struct SortParameters params;
  37.         pthread_t tid[cantH];
  38.         pthread_attr_t attr;
  39.         pthread_attr_init(&attr);
  40.        
  41.         params.begin = 0;
  42.         params.end = divsize;                
  43.         for (int i = 0; i < cantH; i++)
  44.         {      
  45.             params.arr = &arr[i*divsize];
  46.             pthread_create(&tid[i],&attr,sortArrayBySegment,&params);
  47.             pthread_join(tid[i],0);
  48.         }
  49.             printArray(arr,size);
  50.            // MergeSort(arr,size);
  51.            // printArray(arr,size);
  52.             printf("\n");
  53.      
  54.             return 0;
  55.     }
  56.      
  57.     void buildRandomArray(int *arr,int size){
  58.       for(int i =0;i<size;i++){
  59.                     arr[i]= rand()%1000+1;
  60.       }
  61.     }
  62.      
  63.     void * sortArrayBySegment(void * params){
  64.             printf("%s\n","Corriendo hilo...." );
  65.             struct SortParameters *parameters =(struct SortParameters*)params;
  66.             for(int i=parameters->begin;i<parameters->end;i++){
  67.                     for(int j=parameters->begin;j<parameters->end;j++){
  68.                             if(parameters->arr[i]<parameters->arr[j]){
  69.                                     int tmp=parameters->arr[i];
  70.                                     parameters->arr[i]=parameters->arr[j];
  71.                                     parameters->arr[j]=tmp;
  72.                             }
  73.                     }
  74.             }
  75.             pthread_exit(0);
  76.     }
  77.      
  78.     void printArray(int *arr,int size){
  79.              for(int i =0;i<size;i++){
  80.                     printf("%d ",arr[i]);
  81.       }
  82.      
  83.     }


Learn More :