From 5375c3a0201139fbd5f5589e9614625f49a3ef89 Mon Sep 17 00:00:00 2001 From: 13513018 <13513018@ld5-01.if.itb.ac.id> Date: Fri, 12 Feb 2016 15:04:33 +0700 Subject: [PATCH] bucket sort added --- bucket | Bin 0 -> 13190 bytes bucket.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100755 bucket create mode 100644 bucket.c diff --git a/bucket b/bucket new file mode 100755 index 0000000000000000000000000000000000000000..27646b19477ad447d515fcadb644199e46484036 GIT binary patch literal 13190 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 KBdz%iVE+T|MTHFj literal 0 HcmV?d00001 diff --git a/bucket.c b/bucket.c new file mode 100644 index 0000000..85af08c --- /dev/null +++ b/bucket.c @@ -0,0 +1,132 @@ +#include "mpi.h" +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <time.h> +#include <assert.h> + +int main( int argc, char* argv[] ) +{ + double starttime, endtime; + int proceso_id; + int num_element; + int n[1000]; + int m; + int i,d,li,c; + unsigned int j; + char processor_name[MPI_MAX_PROCESSOR_NAME]; + int namelen; + int numprocsused; + // Intiating parallel part + MPI_Status stat; + MPI_Init(NULL,NULL); + + MPI_Comm_size(MPI_COMM_WORLD, &numprocsused); + MPI_Comm_rank(MPI_COMM_WORLD,&proceso_id); + MPI_Get_processor_name(processor_name, &namelen); + unsigned int receivedElement; + if(proceso_id == 0) { + // if it is main process + printf("Enter number of elements\n"); + scanf("%d",&num_element); + printf("Enter %d integers\n",num_element); + for (i= 0; i < num_element; i++){ + scanf("%d", &n[i]); + } + + // starting time calculation of the sort + starttime = MPI_Wtime(); + + // min and max values are got + unsigned int min = n[0]; + unsigned int max = n[0]; + for(i=0; i < num_element; i++) { + if(n[i] < min) { min = n[i]; } + if(n[i] > max) { max = n[i]; } + } + + // calculating how many numbers each bucket/process will get numbers + int elementQtyArray[numprocsused]; + // default values + for(d=1; d < numprocsused; d++) { + elementQtyArray[d] = 0; + } + for(d=0; d < num_element; d++) { + int increaseOf = max/(numprocsused-1); + int iteration = 1; + int pridetas = 0; + for(j = increaseOf; j <= max; j = j + increaseOf) { + if(n[d] <= j) { + elementQtyArray[iteration]++; + pridetas = 1; + break; + } + iteration++; + } + if (pridetas == 1) { + elementQtyArray[iteration-1]++; + } + } + + // Sending how many each process/bucket will get numbers + for(i=1; i<numprocsused; i++) { + MPI_Send(&elementQtyArray[i], 1, MPI_INT, i, -2, MPI_COMM_WORLD); + } + + // doing the same, this time sending the numbers + for(d=0; d < num_element; d++) { + int increaseOf = max/(numprocsused-1); + int iteration = 1; + int issiunte = 0; + for (j = increaseOf; j <= max; j = j + increaseOf) { + if(n[d] <= j) { + MPI_Send(&n[d], 1, MPI_UNSIGNED, iteration, -4, MPI_COMM_WORLD); + issiunte = 1; + break; + } + iteration++; + } + if (issiunte == 1) { + MPI_Send(&n[d], 1, MPI_UNSIGNED, iteration-1, -4, MPI_COMM_WORLD); + } + } + + // Getting back results and adding them to one array + int lastIndex = 0; int indexi = 0; + for(i=1; i < numprocsused; i++) { + unsigned int recvArray[elementQtyArray[i]]; + MPI_Recv(&recvArray[0], elementQtyArray[i], MPI_UNSIGNED, i, 1000, MPI_COMM_WORLD, &stat); + + if(lastIndex == 0) { + lastIndex = elementQtyArray[i]; + + } + for(j=0; j<elementQtyArray[i]; j++) { + n[indexi] = recvArray[j]; + + indexi++; + + } + + } + + + + // stoping the time + + endtime = MPI_Wtime(); + + + + // showing results in array + for(c = 0; c<num_element; c++){ + printf("Hasil Sorting index - %d : %d ",c,n[c]); + } + // sorting results + printf("it took %f seconds \n", endtime-starttime); + printf("Numbers: %d \n", num_element); + printf("Processes: %d \n", numprocsused); + } + MPI_Finalize(); + return 0; +} -- GitLab