From fb07ca540602ac417257cb1eb24e6601a8405a3f Mon Sep 17 00:00:00 2001
From: 13513063 <13513063@ld5-01.if.itb.ac.id>
Date: Fri, 12 Feb 2016 19:18:44 +0700
Subject: [PATCH] Finish Bucket Sort

---
 bucketsort.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++
 laporan.txt  |  66 ++++++++++++++++++++++++++++++
 main         | Bin 0 -> 13784 bytes
 3 files changed, 177 insertions(+)
 create mode 100644 bucketsort.c
 create mode 100644 laporan.txt
 create mode 100755 main

diff --git a/bucketsort.c b/bucketsort.c
new file mode 100644
index 0000000..164f570
--- /dev/null
+++ b/bucketsort.c
@@ -0,0 +1,111 @@
+#include <stdio.h> 
+#include <stdlib.h> 
+#include <string.h>
+#include <time.h> 
+#include <math.h>
+#include <mpi.h> 
+#include <assert.h> 
+ 
+int *create_rand_nums(int num_elements) { 
+  int *rand_nums = (int *)malloc(sizeof(int) * (num_elements+5)); 
+  assert(rand_nums != NULL); 
+  int i; 
+  for (i = 0; i < num_elements; i++) { 
+          rand_nums[i] = (abs((int)rand()) % num_elements); 
+  } 
+  return rand_nums; 
+}
+
+void insertionSort(int *arr, int size){
+	int i,j;
+    int value;
+    for(i=1;i<size;i++)
+    {
+        value=arr[i];
+        if(value == -1) break;
+        j=i-1;
+        while(j>=0 && value<arr[j])
+        {
+            arr[j+1]=arr[j];
+            j=j-1;
+        }
+        arr[j+1]=value;
+    }
+}
+ 
+int main(int argc, char** argv) { 
+  if (argc != 2) { 
+fprintf(stderr, "Usage: avg num_elements\n"); 
+exit(1); 
+  } 
+ 
+  int num_elements = atoi(argv[1]); 
+  srand(time(NULL)); 
+ 
+  MPI_Init(NULL, NULL); 
+ 
+  int world_rank; 
+  MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 
+  int world_size; 
+  MPI_Comm_size(MPI_COMM_WORLD, &world_size); 
+ 
+  int *rand_nums = NULL; 
+  if (world_rank == 0) { 
+rand_nums = create_rand_nums(num_elements); 
+assert(rand_nums != NULL); 
+  } 
+ 
+ time_t start_t;
+ int bucketSize = num_elements;
+ int *bucket = NULL;
+ int * indeks = NULL;
+ int range = (bucketSize+world_size)/world_size;
+ if (world_rank == 0){
+  start_t  = clock(); 
+ 	 bucket = (int *)malloc(sizeof(int) * (world_size+5) * bucketSize);
+ 	indeks = (int *)malloc(sizeof(int) * (world_size+5));
+  memset(bucket,-1,sizeof(int) * world_size * bucketSize);
+  int i;
+  for(i = 0; i < world_size; i++) {
+      indeks[i] = i*bucketSize;
+  }
+  for(i = 0; i < bucketSize; i++) {
+      int no_group = rand_nums[i]/range;
+      bucket[indeks[no_group]++] = rand_nums[i];
+  }
+ }
+  int *sub_rand_nums = (int *)malloc(sizeof(int) * bucketSize); 
+  assert(sub_rand_nums != NULL);
+   MPI_Scatter(bucket, bucketSize, MPI_INT, sub_rand_nums, bucketSize, MPI_INT, 0, MPI_COMM_WORLD); 
+   
+  insertionSort(sub_rand_nums,bucketSize); 
+
+  int *nums_sorted = NULL; 
+  if (world_rank == 0) { 
+nums_sorted = (int *)malloc(sizeof(int) * (world_size+5) * bucketSize); 
+assert(nums_sorted != NULL); 
+  } 
+  MPI_Gather(sub_rand_nums, bucketSize, MPI_INT, nums_sorted, bucketSize, MPI_INT, 0, 
+MPI_COMM_WORLD); 
+ 
+  if (world_rank == 0) { 
+        int i;
+    for(i = 0; i < bucketSize*world_size; ++i){
+      if(nums_sorted[i] >= 0) printf("%d\n",nums_sorted[i]);
+    }
+    time_t finish_t = clock();
+    printf("Waktu eksekusi %d data : %d process : %.5f ms\n", bucketSize, world_size, (double)(finish_t-start_t)*1000/CLOCKS_PER_SEC);
+  } 
+ 
+  if (world_rank == 0) { 
+free(rand_nums); 
+free(bucket); 
+free(nums_sorted); 
+free(indeks);
+  } 
+  free(sub_rand_nums);
+ 
+  MPI_Barrier(MPI_COMM_WORLD); 
+  MPI_Finalize(); 
+}
+
diff --git a/laporan.txt b/laporan.txt
new file mode 100644
index 0000000..dba86e4
--- /dev/null
+++ b/laporan.txt
@@ -0,0 +1,66 @@
+Perbandingan waktu kinerja program
+
+1)
+N = 50.000, M = 1
+t = 2050 ms
+
+N = 50.000, M = 4
+t = 370 ms
+
+N = 50.000, M = 8
+t = 250 ms
+
+N = 50.000, M = 16
+t = 270 ms
+
+N = 50.000, M = 32
+t = 180 ms
+
+2)
+N = 100.000, M = 1
+t = 8070 ms
+
+N = 100.000, M = 4
+t = 890 ms
+
+N = 100.000, M = 8
+t = 410 ms
+
+N = 100.000, M = 16
+t = 370 ms
+
+N = 100.000, M = 32
+t = 310
+
+3)
+N = 200.000, M = 1
+t = 32880 ms
+
+N = 200.000, M = 4
+t = 2500 ms
+
+N = 200.000, M = 8
+t = 1070 ms
+
+N = 200.000, M = 16
+t = 900 ms
+
+N = 200.000, M = 32
+t = 760
+
+4)
+N = 400.000, M = 1
+t = 128580 ms
+
+N = 400.000, M = 4
+t = 9230 ms
+
+N = 400.000, M = 8
+t = 3190 ms
+
+N = 400.000, M = 16
+t = 1970 ms
+
+N = 400.000, M = 32
+t = 1770
+
diff --git a/main b/main
new file mode 100755
index 0000000000000000000000000000000000000000..92ea49e0f18d038b9ecf1f2a2b38b30f7d9313bf
GIT binary patch
literal 13784
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
G`u_pp$se)+

literal 0
HcmV?d00001

-- 
GitLab