From eb93ff67601b84e6d43d5406a789c6bf2766f993 Mon Sep 17 00:00:00 2001
From: 13513066 <13513066@ld5-01.if.itb.ac.id>
Date: Fri, 12 Feb 2016 19:14:12 +0700
Subject: [PATCH] Bucket Sort Done

---
 bucketsort   | Bin 0 -> 13485 bytes
 bucketsort.c | 117 ++++++++++++++++++++++++++++++++++++++++++---------
 mpi_hostfile |   7 +++
 3 files changed, 105 insertions(+), 19 deletions(-)
 create mode 100755 bucketsort
 create mode 100644 mpi_hostfile

diff --git a/bucketsort b/bucketsort
new file mode 100755
index 0000000000000000000000000000000000000000..ee64757457fee41b229fb2cd763c25f103ed3b3c
GIT binary patch
literal 13485
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

literal 0
HcmV?d00001

diff --git a/bucketsort.c b/bucketsort.c
index abf4d3c..8d835c7 100644
--- a/bucketsort.c
+++ b/bucketsort.c
@@ -1,5 +1,7 @@
-include "mpi.h"
+#include "mpi.h"
 #include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
 
 void insertionSort(int n, int* array)
 {
@@ -49,30 +51,107 @@ int main() {
   double time_bucket= 0.0;
   double time_insert= 0.0;
 
+  int* bucket;
+  int* array;
+  float div;
+  float upperbound;
+
   int n, c, d, t;
   if(rank==0) {
-  printf("Enter number of elements\n");
-  scanf("%d", &n);
-
-  printf("Enter %d integers\n", n);
-  int *array = (int*)malloc(sizeof(int)*n);
-
-  for (c = 0; c < n; c++) {
-    scanf("%d", &array[c]);
+    printf("Enter number of elements\n");
+    scanf("%d", &n);
+
+    printf("Enter %d integers\n", n);
+    array =(int*)malloc(sizeof(int)*n);
+      srand(time(NULL));
+      for (c = 0; c < n; c++) {
+      array[c] = rand()%100;
+    }
   }
 
-  float div = (float)(max(array, n) - min(array, n)/(float)size);
-  printf("%f", div);
-
-
-  insertionSort(n, array);
-  printf("Sorted list in ascending order:\n");
-
-  for (c = 0; c <= n - 1; c++) {
-    printf("%d\n", array[c]);
+  MPI_Barrier(MPI_COMM_WORLD);
+  time_bucket -= MPI_Wtime(); 
+  MPI_Bcast(&n, 1, MPI_INT, 0 , MPI_COMM_WORLD);
+  
+ 
+  if(rank!=0) {
+    array=(int*)malloc(sizeof(int)*n);
   }
+  
+ 
+  MPI_Bcast(array, n, MPI_INT, 0 , MPI_COMM_WORLD);
+  
+  
+  
+  bucket = (int*)malloc(sizeof(int)*n);
+  
+  int i;
+
+  div = (float)(max(array, n) - min(array, n))/(float)size;
+  if(div==0) div=1;
+  int j=0;
+  for(i=0; i<n; i++) {
+	int bucket_no = (int)((array[i]-min(array,n))/div);
+	if(rank==bucket_no) {
+		bucket[j]=array[i];
+		j++;
+  	}
+	else if (bucket_no>=size) {
+		if (rank==size-1){
+			bucket[j]=array[i];
+			j++;
+		}
+	}
+  }   
+   
+  insertionSort(j,bucket);
+
+  int *result;
+  if(rank==0) {
+	result = (int*)malloc(sizeof(int) * n);
+  }
+  
+  int *counts = (int*) malloc (sizeof(int) * size);
+
+  // Each process tells the root how many elements it holds
+  MPI_Gather(&j, 1, MPI_INT, counts, 1, MPI_INT, 0, MPI_COMM_WORLD);
+
+  // Displacements in the receive buffer for MPI_GATHERV
+  int *disps = (int*) malloc (sizeof(int) * size);
+  // Displacement for the first chunk of data - 0
+  for (i = 0; i < size; i++)
+    disps[i] = (i > 0) ? (disps[i-1] + counts[i-1]) : 0;
+
+  // Collect everything into the root
+  MPI_Gatherv(bucket, j, MPI_INT,
+            result, counts, disps, MPI_INT, 0, MPI_COMM_WORLD);
+
+  MPI_Barrier(MPI_COMM_WORLD);
+  time_bucket += MPI_Wtime(); 
+  
+  if (rank==0) {
+    
+    printf("Sorted list in ascending order with BucketSort:\n");
+
+    for (c = 0; c <= n - 1; c++) {
+      printf("%d ", result[c]);
+    }
+    printf("\nTime : %lf\n", time_bucket);
   }
+ 
+  if(rank==0) {
+    	time_insert -= MPI_Wtime();
+	insertionSort(n, array);
+ 	time_insert+= MPI_Wtime();
+	printf("Sorted list in ascending order with Insertion Sort:\n");
+
+    	for (c = 0; c <= n - 1; c++) {
+      		printf("%d ", result[c]);
+   	 }
+    	printf("\nTime : %lf\n", time_insert);
+  }
+
   MPI_Finalize();
-return 0;
+  return 0;
 }
 
diff --git a/mpi_hostfile b/mpi_hostfile
new file mode 100644
index 0000000..1aab781
--- /dev/null
+++ b/mpi_hostfile
@@ -0,0 +1,7 @@
+#daftar host
+localhost
+167.205.35.26
+167.205.35.28
+167.205.35.29
+167.205.35.30
+167.205.35.31
-- 
GitLab