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