From 7d361fd884148e0181472c26371e462109b34bea Mon Sep 17 00:00:00 2001
From: 13513025 <13513025@ld5-06.if.itb.ac.id>
Date: Thu, 17 Dec 2015 01:34:16 +0700
Subject: [PATCH] fix bucket sort

---
 mpi_hostfile |   1 -
 send         | Bin 13420 -> 13515 bytes
 send.c       |  67 +++++++++++++++++++++++++++++++--------------------
 3 files changed, 41 insertions(+), 27 deletions(-)

diff --git a/mpi_hostfile b/mpi_hostfile
index 7753b65..1aab781 100644
--- a/mpi_hostfile
+++ b/mpi_hostfile
@@ -1,6 +1,5 @@
 #daftar host
 localhost
-167.205.35.25
 167.205.35.26
 167.205.35.28
 167.205.35.29
diff --git a/send b/send
index 6f64c5ec9c89c4a16ad07fa456193fb021e41baa..e1de1070a06326219eb18e663b5403a02ae42ed2 100755
GIT binary patch
delta 4322
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

delta 3852
zcmZ`+dr(x@89(>#i(MYO3oHwQvJGrp9<pGIN|f<pyY11D3D__;ooFyk3^-<LQ%tQf
zUC0)an_Uv{G#Tpf2Xv<D<d4)AlZvgntBq)Fr`V<`b!fVEYG*f+8JcQ+BzF6K=bpPf
z63@&%=ls6+`ObIGJ@-=QOvgZ>v)!f;Y+6sq<Y2`STg1g_B;p#pQe*p_tf6=Y%a!_a
zJ^32+<ZC*feD<bvrM~%3SGIQs&+X|-Zk{s#sQLOzE3+Fw5~U@0%<#M%dq5&z-H?g2
z0(h3Nad|y+7z(8x7Bl*#A=YGYOJ!^n`dfT{7JD`c68AW^a^7p4T5GJ8mT~+s=egM+
z*m#@IZ)4wD4~`wAkPLg;!P{J;oL)qZJ=i`+gxM%OPEtfhba|u3UMJ*-S(C}V(PvdO
zvgjSa<yyj8hM+$WV=l=d@8v0iq79c|;PPzL^a`stzi900eC8>3+Ps_jEe*w(E{P;S
z$RX7BF6p!qB9rZ`$C9^EH;+s`P!r5Cp?VuBZ|75_gTZtg5g{VIi2cptmgKRU7K<e1
zuzMM9$<AC>KYPrY6&w&5uz+A*TAdIYn#rJH)4K&8LVKfKrbGysH1wN{bMu5?nyUW=
zh@`y7p|_VRFhksdLdkdvn)gk_kU5f^<oG9uvC@*!R4NDphmc@E!Z9vz5HW5@a)jeo
z5aU9U1027I7^^JV&GCN37=LmP$Il|h<R#lV-h~+QN|G%cKY`eWSV8|O?>CW<iG*4%
zumy1zVh_ig5N9KHaJ&I=4r0RbLx}B&XaAQ<)qS*4y}X^OS83><vn`KooQO_BUC@b`
z!iR~2Sqe#5K=H=T0sA^g*@+{t2W@l(?lBGB&Y|kH@5$TFodAP8_cykkK~^emFYQL!
z2}CH*9?h(*<E*QK)!jH+>>*^Yvki<SegICkoj1J-B<VlraCc~^@dP`b*}7^)I50zp
zXn%e$TBPAXoc5Q<+-2fdun6^R>~86;7p7H1C@>>|@Y=xiflF*n);0Ep?Bd`=AdWj4
zI&}bC$X!0Dln;tLgsQQVc%qy}=9yVoZ({4cRO$@EL?g^-xEJ?`hN4hhAU>ga%mtPj
zm_7qyM59DM1&ZMQ5ay?m#rcVMKTSQHqWytks-EYGNtA;C5Qfr(F(8Cqm?HMxB~Uk1
zjZ^hpI54eFB(7l)YG5+lHblR5mWC1%pbM-s=j+Z62n=7uljw@xdb@-DK4+OXIuV#b
zLh=rDU;~mCi^~vsV&W4t6{F$3QTA`UD`%Ff8IY)cD(NKOEG*Ok)V3k@^?hI-W8jHB
zg-DIrf7U#s3s=snH0wT+;kKF3SqbHTtBYrVIOMPyeHXCqTx0%(!VfWRzlItDGxo?Q
z>}!rH+a#4H!yv20$p#%Ii%5>yu#(jfv%mUNT=|?$lT|U!TTYg?9BR}>EOegP9OnaT
zz|(~=QRTUsu}A(4)igh*alm>`|GvmyNsAFO2-|9gPmWdyf4Gfl!>qzW^BekG98j!L
zSP`Vw7;cL<jpGZ@q)wj1qmUOKZq7weQv<(VxF0OXX_ogG(NG}VhDJVP0Cjh3y7Pl}
z!FGwDuRncXqhCU!{p%cH70Pjhs>bq#;U%KCcvy3$4-7I#UWIj%_GiiI9om}bk@S5v
z1r_7kKqC0soQ^&69E3yF>EtQMAJn;I?;XSHY(}>c+TRAQ^V6;`j02A>OwarO)zY&!
zqA3mBUnvOh&qU&|PzXd|ck<J_69jU&EdpCIpuUfC$02v{Mh%3)GS9+5Is<cIpkS|N
zFp&)zq2X<}FT(lMje$~iclp$2^~rKr%!-$69y8h8@7-r(1+EqH=uH-I^=$oa=l-WW
z-X}ec(AkJUc%T!h*s%61Fyhys_GT(I0HXq)+F`5)PgqlLz!-<|SqK#`EO^HIU_8d^
z3##O)o9u~#8q?4XI1Je91!ckApuP*lNmGuaPyTYYIS?|)?O7K6>s$h?-SE5xa?|tW
z<iBvCa-c=v*#&No;8#nxLqi6`A#>Ug${mMi7SBQ$$)-MY#I%#Gb{9$C7;AM0&0~Aq
zQ<Bw_sUVjS_SdD$w@hhsTnBFnG2+(<TeDy+)nFRq*A1I~#lf!|w)gVbmSx+eZuawK
zrP3~TdD(iHJ4;KQM=c5$z|3N!tf|y5`Pg?#OAQ~I6}H3u%t24#7k7#)({p0%6XP3V
zJS@g{#CYDSusl!m*ip}rERC?HGQYFiq;L=2aCBqa#d?4WJ~;XiQwVJhi<SAUJ`t6V
z-6>mbr2<jbP`)}H@lg?SH|r?}4dK|w#zCe<pccFyKyxt3>(AA%%I&<S2<fu24c;1?
ze!YVn?f0&7#>H(fF0M_DEavsw=3SQWdRN&x;8nrakw5m(gMAWQd}GV~)*(2uunn<0
z%U4_R0K+!S8hq=eVfKCKFR*dndTUDsXOIg_s#t9;tkcjVtf}IcemzYZP3sL%_<Eui
z(leO7(rvKfwpF^Nqs&?9GGr3iK0qzdyA0W+osCwyH|eWfsBb6wau?DaL|^bix)WB+
z<f_B4;K3@F0dCqXR`qz@fK8b%M`{4cB%4GR(VGOFu-0k}x3k(WdDxGuAD3TtvAflW
zEAUE%P5iNtYN+$iyU;7_A1mBD9s{lieh>7#b5-b`26`^I-z?rK{+<JUAJ9MVcOuB;
zKYP*d<v%Bk_eXetjE&a#rK>nEx-P6O_I?{<tFyoooU)xH#ESIT@{vyF@@^E2GPc9-
zE~*DEMy?1gRd55G`zY6iq?fmAbimklB6r8P0Xg93XYo%_m$0dqzotXT^Fn^{&(%vp
z9xt@m_~`~?1ieUySZl3YdW+Aay#FKiMgIaVr(Br+qv5L1eT?!;vkcn0-Vr;(PgLL*
uBb{BA@|OCz1k|p0b#?t3UBarsjMu{0#=3_kcG^_JF0RZR`(Wiq(*FT~PdSYM

diff --git a/send.c b/send.c
index 9ca1060..570fbcd 100644
--- a/send.c
+++ b/send.c
@@ -1,5 +1,6 @@
 #include "mpi.h"
 #include <stdio.h>
+#include <stdlib.h>
 
 struct sub_array {
 	int *data;
@@ -10,10 +11,10 @@ struct sub_array {
 };
 
 int *create_rand_nums(int num_elements) {
-        int *rand_nums = (float *)malloc(sizeof(float) * num_elements);
+        int *rand_nums = (int *)malloc(sizeof(int) * num_elements);
         int i;
         for (i = 0; i < num_elements; i++) {
-                rand_nums[i] = (rand() / (int)num_elements);
+                rand_nums[i] = (rand() % num_elements);
         }
         return rand_nums;
 }
@@ -30,10 +31,13 @@ int *insertion_sort(int *arr, int size){
                         d--;
                 }
         }
+	return arr;
 }
 
 int main(int argc, char **argv) {
-        int numtasks, rank, dest, source, rc, count, tag=1;
+	double total_time = 0.0;	
+        total_time -= MPI_Wtime();
+	int numtasks, rank, dest, source, rc, count, tag=1;
         MPI_Status Stat;
 
         int i,j;
@@ -53,66 +57,77 @@ int main(int argc, char **argv) {
         int world_size;
         MPI_Comm_size(MPI_COMM_WORLD, &world_size);
 
-        if (rank == 0) {
+        if (world_rank == 0) {
                 int *rand_array = create_rand_nums(N);
+		for (i = 0; i <=10; i++){
+                        printf("%d ", rand_array[i]);
+                }
+                printf("\n");
                 struct sub_array arr_of_sub[world_size];
 
                 /* Create sub arrays for each process */
                 for (i = 0; i < world_size; i++){
 			arr_of_sub[i].data = (int *) malloc (N * sizeof(int));
                         arr_of_sub[i].id = i+1;
-                        arr_of_sub[i].lower_bound = N/world_size*i;
-                        arr_of_sub[i].upper_bound = N/world_size*(i+1);
+                        arr_of_sub[i].lower_bound = N/(world_size)*i;
+                        arr_of_sub[i].upper_bound = N/(world_size)*(i+1);
                         arr_of_sub[i].size = 0;
+			printf("up %d - down %d\n",arr_of_sub[i].upper_bound, arr_of_sub[i].lower_bound);
                 }
 
                 /* Assign each element to sub array */
                 for (i = 0; i < world_size; i++){
-                        for (j = 0; i < N; i++){
-                                if (rand_array[j] < arr_of_sub[i].upper_bound && rand_array[j] > arr_of_sub[i].lower_bound){
-                                        arr_of_sub[i].size++;
+                        for (j = 0; j < N; j++){
+				if (rand_array[j] < arr_of_sub[i].upper_bound && rand_array[j] >= arr_of_sub[i].lower_bound){
                                         arr_of_sub[i].data[arr_of_sub[i].size] = rand_array[j];
+					arr_of_sub[i].size++;
                                 }
                         }
                 }
 
                 /* Send each sub array to each process */
-                for (i = 0; i < world_size; i++){
-			printf("size %d = %d\n", i, arr_of_sub[i].size);
-			rc = MPI_Send(&arr_of_sub[i].size, 1, MPI_INT, (i+1), tag, MPI_COMM_WORLD);
-                        rc = MPI_Send(&arr_of_sub[i].data, arr_of_sub[i].size, MPI_INT, (i+1), tag, MPI_COMM_WORLD);
-                }
-
+                for (i = 1; i < world_size; i++){
+			rc = MPI_Send(&arr_of_sub[i].size, 1, MPI_INT, i, tag, MPI_COMM_WORLD);
+                        rc = MPI_Send(arr_of_sub[i].data, arr_of_sub[i].size, MPI_INT, i, tag, MPI_COMM_WORLD);
+         	}             
+   
                 /* Receive sorted sub array from each process */
-		for (i = 0; i < world_size; i++){
-                	rc = MPI_Recv(&arr_of_sub[i].data, arr_of_sub[i].size, MPI_INT, i+1, tag, MPI_COMM_WORLD, &Stat);
+		for (i = 1; i < world_size; i++){
+                	rc = MPI_Recv(arr_of_sub[i].data, arr_of_sub[i].size, MPI_INT, i, tag, MPI_COMM_WORLD, &Stat);
 		}
+		printf("size %d\n", arr_of_sub[0].size);
+		arr_of_sub[0].data = insertion_sort(arr_of_sub[0].data, arr_of_sub[0].size);
 
 		/* Gabungin arraynya */
                 int x = 0;
                 for (i = 0; i < world_size; i++){
                         for(j = 0; j < arr_of_sub[i].size; j++){
                                 rand_array[x] = arr_of_sub[i].data[j];
-                                x++;
+				x++;
                         }
                 }
+		total_time += MPI_Wtime();
 
-        } else if (rank == 1) {
-              	int *sub_arr;
-                int size;
-
+		for (i = 0; i < N; i++){
+			printf("%d ",rand_array[i]);
+		}
+		printf("\n");
+		printf("total time = %lf\n", total_time);
+        } else {
                 /* Receive unsorted array from root process */
-                rc = MPI_Recv(&size, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &Stat);
-                rc = MPI_Recv(&sub_arr, size, MPI_INT, 0, tag, MPI_COMM_WORLD, &Stat);
+                int size;
+		rc = MPI_Recv(&size, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &Stat);
+                int *sub_arr = (int *) malloc (N* sizeof(int));
+		rc = MPI_Recv(sub_arr, size, MPI_INT, 0, tag, MPI_COMM_WORLD, &Stat);
 		printf("size %d\n", size);
 
                 /* Sort the array using insertion sort */
                 sub_arr = insertion_sort(sub_arr,size);
 
                 /* Send sorted array to root process */
-                rc = MPI_Send(&sub_arr, size, MPI_INT, 0, tag, MPI_COMM_WORLD);
+                rc = MPI_Send(sub_arr, size, MPI_INT, 0, tag, MPI_COMM_WORLD);
         }
-
+	
         MPI_Finalize();
 }
 
-- 
GitLab