How to write a C Program Sort Array By Segment in C Programming Language ?
This C Program Sort Array By Segment.
Solution:
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <pthread.h>
- struct SortParameters{
- int *arr;
- int begin;
- int end;
- };
- void buildRandomArray(int *arr,int size);
- void * sortArrayBySegment(void * params);
- void printArray(int *arr,int size);
- void Merge(int *A,int *L,int leftCount,int *R,int rightCount);
- void MergeSort(int *A,int n);
- int main(){
- int size=0;
- int cantH=0;
- printf("Ingresar size del arreglo\n");
- scanf("%d", &size);
- printf("Ingresar cant de hilos\n");
- scanf("%d", &cantH);
- if(size % cantH != 0){
- printf("%d no es divisible entre %d\n",size,cantH);
- return -1;
- }
- int *arr=(int *)malloc(sizeof(int)*size);
- buildRandomArray(arr,size);
- int divsize = size / cantH;
- struct SortParameters params;
- pthread_t tid[cantH];
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- params.begin = 0;
- params.end = divsize;
- for (int i = 0; i < cantH; i++)
- {
- params.arr = &arr[i*divsize];
- pthread_create(&tid[i],&attr,sortArrayBySegment,¶ms);
- pthread_join(tid[i],0);
- }
- printArray(arr,size);
- // MergeSort(arr,size);
- // printArray(arr,size);
- printf("\n");
- return 0;
- }
- void buildRandomArray(int *arr,int size){
- for(int i =0;i<size;i++){
- arr[i]= rand()%1000+1;
- }
- }
- void * sortArrayBySegment(void * params){
- printf("%s\n","Corriendo hilo...." );
- struct SortParameters *parameters =(struct SortParameters*)params;
- for(int i=parameters->begin;i<parameters->end;i++){
- for(int j=parameters->begin;j<parameters->end;j++){
- if(parameters->arr[i]<parameters->arr[j]){
- int tmp=parameters->arr[i];
- parameters->arr[i]=parameters->arr[j];
- parameters->arr[j]=tmp;
- }
- }
- }
- pthread_exit(0);
- }
- void printArray(int *arr,int size){
- for(int i =0;i<size;i++){
- printf("%d ",arr[i]);
- }
- }