From 50b56fada53a9dcc76345779e498b7b244cc43a0 Mon Sep 17 00:00:00 2001
From: ich0 <nithoalif@yahoo.com>
Date: Fri, 12 Feb 2016 19:28:23 +0700
Subject: [PATCH] done]

---
 bucket_sort   | Bin 0 -> 13459 bytes
 bucket_sort.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++
 mpi_hostfile  |  11 +++++
 3 files changed, 131 insertions(+)
 create mode 100755 bucket_sort
 create mode 100644 bucket_sort.c
 create mode 100644 mpi_hostfile

diff --git a/bucket_sort b/bucket_sort
new file mode 100755
index 0000000000000000000000000000000000000000..1e4e663358a2dfe9eb9cbb6fed961666b918dd39
GIT binary patch
literal 13459
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

literal 0
HcmV?d00001

diff --git a/bucket_sort.c b/bucket_sort.c
new file mode 100644
index 0000000..a587768
--- /dev/null
+++ b/bucket_sort.c
@@ -0,0 +1,120 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <mpi.h>
+#include <assert.h>
+
+void insertion_sort(int* array, int num_elements) {
+	// Sorting array
+	int i;
+	int d;
+	int t;
+	for (i = 1; i < num_elements; i++) {
+		d = i;
+
+		while ( d > 1 && array[i] < array[d-1] ) {
+				t = array[d];
+				array[d] = array[d-1];
+				array[d-1] = t;
+
+				d--;
+		}
+	}
+}
+
+
+int cmpfunc (const void * a, const void * b)
+{
+   return ( *(int*)a - *(int*)b );
+}
+
+int main(int argc, char const *argv[]) {
+	if (argc != 2) {
+		fprintf(stderr, "Usage: avg num_elements_per_proc\n");
+		exit(1);
+	}
+
+	MPI_Init(NULL, NULL);
+
+	int BUCKET_SIZE = atoi(argv[1]); //Each Bucket size
+	int MAX_VALUE = atoi(argv[1]);
+	int i, j, k, z, iter=0;
+	time_t t;
+
+	int WORLD_RANK;
+	int WORLD_SIZE; //Number of process / Number of bucket
+	MPI_Comm_rank(MPI_COMM_WORLD, &WORLD_RANK);
+	MPI_Comm_size(MPI_COMM_WORLD, &WORLD_SIZE);
+	double begin = MPI_Wtime();
+	srand((unsigned) time(&t));
+	if (WORLD_RANK == 0) { //Initialize bucket
+		int rand_array[BUCKET_SIZE];
+		
+		for (i = 0; i < BUCKET_SIZE; i++){
+			rand_array[i] = rand() % MAX_VALUE;
+			// printf("%d\n", rand_array[i]);
+		}
+		int sum = 0;
+		int bucket[BUCKET_SIZE];
+		int low, high;
+		for (i = 1; i < WORLD_SIZE; i++){
+			for (j = 0; j < BUCKET_SIZE; j++){
+				bucket[j] = -1;
+			}
+	//		printf("%d\n", i);
+
+			for (j = 0; j < BUCKET_SIZE; j++){
+				low = (i - 1) * (MAX_VALUE/WORLD_SIZE+1);
+				high = i * (MAX_VALUE/WORLD_SIZE+1);
+				//printf("%d %d %d %d %d\n", MAX_VALUE, WORLD_SIZE, low, high, rand_array[j]);
+				if ((rand_array[j] < high) && (rand_array[j] >= low)){
+					bucket[iter] = rand_array[j];
+					sum++;
+					//printf("%d\n", bucket[iter]);
+					iter++;
+				} else {
+//					printf("%d\n", rand_array[j]);
+				}
+			}
+			//printf("AAA %d AAA\n", sum);
+
+			MPI_Send(bucket, BUCKET_SIZE, MPI_INT, i, 0, MPI_COMM_WORLD);
+			iter = 0;
+		}
+	} else {
+		int bucket_n[BUCKET_SIZE];
+		MPI_Recv(bucket_n, BUCKET_SIZE, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+		qsort(bucket_n, BUCKET_SIZE, sizeof(int), cmpfunc);
+		int lol = 0;
+		
+		MPI_Send(bucket_n, BUCKET_SIZE, MPI_INT, 0, 0, MPI_COMM_WORLD);
+	}
+
+	if (WORLD_RANK == 0){
+		int bucket[BUCKET_SIZE];
+		int delim = 0;
+		for (i = 1; i<WORLD_SIZE; i++){
+			int bucket_n[BUCKET_SIZE];
+			//printf("%d\n", i);
+			MPI_Recv(bucket_n, BUCKET_SIZE, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+			//printf("Tulis dari proses %d\n", i);
+			for (z = 0; z < BUCKET_SIZE; z++){
+			//	printf("%d ", bucket_n[z]);
+				if (bucket_n[z] != -1){
+					bucket[delim] = bucket_n[z];
+					delim++;
+				}
+			}
+			//printf("\n");
+		}
+		//assert(delim == BUCKET_SIZE);
+		for (i = 0; i < BUCKET_SIZE; i++){
+			printf("%d\n", bucket[i]);
+		}
+
+		double end = MPI_Wtime();
+		printf("Time elapsed: %f seconds\n", end - begin);
+	}
+	MPI_Finalize();
+	return 0;
+}
diff --git a/mpi_hostfile b/mpi_hostfile
new file mode 100644
index 0000000..bffbf88
--- /dev/null
+++ b/mpi_hostfile
@@ -0,0 +1,11 @@
+#daftar host 
+localhost 
+167.205.35.26 
+167.205.35.28 
+167.205.35.29 
+167.205.35.30 
+167.205.35.31 
+#167.205.35.32 
+#167.205.35.33 
+#167.205.35.34 
+
-- 
GitLab