From b29a98b7921aed35aeba5b3247034588a9f055d8 Mon Sep 17 00:00:00 2001
From: Irene Wiliudarsan <irenehuang189@gmail.com>
Date: Fri, 12 Feb 2016 21:44:46 +0700
Subject: [PATCH] Fix bucket sort

---
 bucket_sort   | Bin 13286 -> 13447 bytes
 bucket_sort.c | 266 ++++++++++++++++++++++++++------------------------
 laporan.txt   |  25 ++++-
 3 files changed, 160 insertions(+), 131 deletions(-)

diff --git a/bucket_sort b/bucket_sort
index c94acb33e0c63c86de8eed161d60619e74b0f0bb..7570f4683e5bd63db2a2ed625f0729c8744a52da 100755
GIT binary patch
literal 13447
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

delta 3452
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
Iy|$(I|Ej%?<^TWy

diff --git a/bucket_sort.c b/bucket_sort.c
index 5de4d6c..83a990e 100644
--- a/bucket_sort.c
+++ b/bucket_sort.c
@@ -5,147 +5,153 @@
 #include <assert.h>
 
 int *create_rand_nums(int num_elements) {
-	int *rand_nums = (int *)malloc(sizeof(int) * num_elements);
-	assert(rand_nums != NULL);
-	int i;
-	for (i = 0; i < num_elements; i++) {
-		rand_nums[i] = rand()%100 + 1;
-		printf("%d ", rand_nums[i]);
-	}
-	printf("\n");
-	return rand_nums;
+    int *rand_nums = (int *)malloc(sizeof(int) * num_elements);
+    assert(rand_nums != NULL);
+    int i;
+    for (i = 0; i < num_elements; i++) {
+        rand_nums[i] = rand()%RAND_MAX + 1;
+    }
+    return rand_nums;
 }
 
 void searchMaxMin(int *array, int numElements, int *max, int *min) {
-	int i;
-	*min = array[0];
-	*max = array[0];
-	for (i=1; i<numElements; i++) {
-		if (*min > array[i]) {
-			*min = array[i];
-		}
-		if (*max < array[i]) {
-			*max = array[i];
-		}
-	}
+    int i;
+    *min = array[0];
+    *max = array[0];
+    for (i=1; i<numElements; i++) {
+        if (*min > array[i]) {
+            *min = array[i];
+        }
+        if (*max < array[i]) {
+            *max = array[i];
+        }
+    }
 }
 
 void divideBucket(int max, int min, int bucketNum, int *result) {
-	int gap = (max-min)/bucketNum;
-	int remain = (max-min)%bucketNum;
-	int i;
-	result = (int *)malloc(sizeof(int) * (bucketNum+1));
-	result[0] = min;
-	printf("%d\n", result[0]);
-	for (i=1; i<bucketNum; i++) {
-		result[i] = result[i-1] + gap;
-		printf("%d ", result[i]);
-	}
-	result[i+1] = max;
-	printf("%d\n", result[i+1]);
+    int gap = (max-min)/bucketNum;
+    int remain = (max-min)%bucketNum;
+    int i;
+    
+    result[0] = min;
+    for (i=1; i<bucketNum; i++) {
+        result[i] = result[i-1] + gap;
+    }
+    result[i] = max;
 }
 
 void sort(int *array, int num_elements) {
-	int sum = 0;
-	int i, j, k;
-	for (i = 1; i <= num_elements-1; i++) {
-		j = i;
-
-		while(j>0 && array[j] < array[j-1]) {
-			k = array[j];
-			array[j] = array[j-1];
-			array[j-1] = k;
-			j--;
-		}
-	}
+    int sum = 0;
+    int i, j, k;
+    for (i = 1; i <= num_elements-1; i++) {
+        j = i;
+
+        while(j>0 && array[j] < array[j-1]) {
+            k = array[j];
+            array[j] = array[j-1];
+            array[j-1] = k;
+            j--;
+        }
+    }
 }
 
 int main(int argc, char** argv) {
-	int bucketNum, rank, dest, source, rc, count, tag=1;  
-	MPI_Status Stat; 
-	
-	MPI_Init(&argc,&argv); 
-	MPI_Comm_size(MPI_COMM_WORLD, &bucketNum); 
-	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-
-	int numElements = atoi(argv[1]); 
-	 
-	if (rank == 0) {
-		// Random array
-		int *num = NULL;
-		num = create_rand_nums(numElements);
-
-		int min, max;
-		searchMaxMin(num, numElements, &max, &min);
-		printf("%d %d\n", max, min);
-
-		int *bucketRange = NULL;
-		divideBucket(max, min, bucketNum, bucketRange);
-
-		// Bagi angka random ke bucket
-		int buckets[bucketNum][numElements];
-		int bucketsSize[bucketNum];
-		int i;
-		for (i=0; i<bucketNum; i++) {
-			bucketsSize[i] = 0;
-		}
-
-		int j, isFound;
-		for (i=0; i<numElements; i++) {
-			j = 0;
-			isFound = 0;
-			while (j<bucketNum && !isFound) {
-				if ((num[i] >= bucketRange[j]) && (num[i] < bucketRange[j+1]-1)) {
-					bucketsSize[j]++;
-					buckets[j][bucketsSize[j]] = num[i];
-					isFound = 1;
-				} else {
-					j++;
-				}
-			}
-		}
-		for (i=0; i<bucketNum; i++) {
-			for (j=0; j<bucketsSize[i]; j++) {
-				printf("%d ", buckets[j]);
-			}
-			printf("\n");
-		}
-
-		// Kirim
-		for (i=1; i<bucketNum; i++) {
-			rc = MPI_Send(&bucketsSize[i], 1, MPI_INT, i, tag, MPI_COMM_WORLD);
-			rc = MPI_Send(&buckets[i], bucketsSize[i], MPI_INT, i, tag, MPI_COMM_WORLD);
-		}
-
-		// Sort diri sendiri
-		sort(buckets[0], bucketsSize[0]);
-		for (i=0; i<bucketsSize[0]; i++) {
-			printf("%d ", buckets[0][i]);
-		}
-
-		for (i=1; i<bucketNum; i++) {
-			int size = bucketsSize[i];
-			int temp[size];
-			rc = MPI_Recv(&temp, bucketsSize[i], MPI_INT, i, tag, MPI_COMM_WORLD, &Stat);
-
-			for (i=0; i<size; i++) {
-				printf("%d ", temp[i]);
-			}
-		}
-	} else { 
-		int bucketSize;
-		rc = MPI_Recv(&bucketSize, 1, MPI_INT, source, tag, MPI_COMM_WORLD, &Stat);
-
-		int *numIn;
-		source = 0;
-		rc = MPI_Recv(&numIn, bucketSize, MPI_INT, source, tag, MPI_COMM_WORLD, &Stat);
-
-		// Sorting
-		sort(numIn, bucketSize);
-		dest = 0;
-		rc = MPI_Send(&numIn, bucketSize, MPI_INT, dest, tag, MPI_COMM_WORLD);
-	}
-	 
-	MPI_Finalize(); 
+    int bucketNum, rank, dest, source, rc, count, tag=1;
+    clock_t beginTime, endTime;
+    MPI_Status Stat; 
+    
+    beginTime = clock();
+    MPI_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD, &bucketNum); 
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+    int numElements = atoi(argv[1]); 
+    
+
+    if (rank == 0) {
+        // Random array
+        int *num = NULL;
+        num = create_rand_nums(numElements);
+
+        int min, max;
+        searchMaxMin(num, numElements, &max, &min);
+
+        int *bucketRange = NULL;
+        bucketRange = (int *)malloc(sizeof(int) * (bucketNum+1));
+        divideBucket(max, min, bucketNum, bucketRange);
+
+        // Bagi angka random ke bucket
+        int buckets[bucketNum][numElements];
+        int bucketsSize[bucketNum];
+        int i;
+        for (i=0; i<bucketNum; i++) {
+            bucketsSize[i] = 0;
+        }
+
+        int j, isFound;
+        for (i=0; i<numElements; i++) {
+            j = 0;
+            isFound = 0;
+            while (j<bucketNum && !isFound) {
+                if (j == 0) {
+                   if ((num[i] >= bucketRange[j]) && (num[i] <= bucketRange[j+1])) {
+                        buckets[j][bucketsSize[j]] = num[i];
+                        bucketsSize[j]++;
+                        isFound = 1;
+                    } else {
+                        j++;
+                    } 
+                } else {
+                    if ((num[i] >= bucketRange[j]+1) && (num[i] <= bucketRange[j+1])) {
+                        buckets[j][bucketsSize[j]] = num[i];
+                        bucketsSize[j]++;
+                        isFound = 1;
+                    } else {
+                        j++;
+                    }
+                }
+            }
+        }
+
+        // Kirim
+        for (i=1; i<bucketNum; i++) {
+            rc = MPI_Send(&bucketsSize[i], 1, MPI_INT, i, 1, MPI_COMM_WORLD);
+            rc = MPI_Send(buckets[i], bucketsSize[i], MPI_INT, i, 2, MPI_COMM_WORLD);
+        }
+
+        //Sort diri sendiri
+        sort(buckets[0], bucketsSize[0]);
+        // for (i=0; i<bucketsSize[0]; i++) {
+        //     printf("%d\n", buckets[0][i]);
+        // }
+
+        for (i=1; i<bucketNum; i++) {
+            int size = bucketsSize[i];
+            int temp[size];
+            rc = MPI_Recv(temp, bucketsSize[i], MPI_INT, i, 3, MPI_COMM_WORLD, &Stat);
+            // for (i=0; i<size; i++) {
+            //     printf("%d\n", temp[i]);
+            // }
+        }
+        endTime = clock();
+        printf("Execution time: %f seconds\n", (double)(endTime-beginTime)/CLOCKS_PER_SEC);
+    } else { 
+        int bucketSize;
+        source = 0;
+        rc = MPI_Recv(&bucketSize, 1, MPI_INT, source, 1, MPI_COMM_WORLD, &Stat);
+        int *numIn = (int *)malloc(sizeof(int) * (bucketSize));;
+        source = 0;
+        rc = MPI_Recv(numIn, bucketSize, MPI_INT, source, 2, MPI_COMM_WORLD, &Stat);
+
+        // Sorting
+        sort(numIn, bucketSize);
+        dest = 0;
+        rc = MPI_Send(numIn, bucketSize, MPI_INT, dest, 3, MPI_COMM_WORLD);
+    }
+    
+    MPI_Barrier(MPI_COMM_WORLD); 
+    MPI_Finalize();
+
 }
 
+
diff --git a/laporan.txt b/laporan.txt
index 82839fa..53b45be 100644
--- a/laporan.txt
+++ b/laporan.txt
@@ -1 +1,24 @@
-- Test Case 1 (N = 50000) M = 1 -> M = 4 -> M = 8 -> M = 16 -> M = 32 -> - Test Case 2 (N = 100000) M = 1 -> M = 4 -> M = 8 -> M = 16 -> M = 32 -> - Test Case 3 (N = 200000) M = 1 -> M = 4 -> M = 8 -> M = 16 -> M = 32 -> - Test Case 4 (N = 400000) M = 1 -> M = 4 -> M = 8 -> M = 16 -> M = 32 ->
+- Test Case 1 (N = 50000)
+  M = 1 -> 3.38 s
+  M = 4 -> 0.27 s
+  M = 8 -> 0.22 s
+  M = 16 -> 0.13 s
+  M = 32 -> 0.1 s
+
+- Test Case 2 (N = 100000)
+  M = 1 -> 13.14 s
+  M = 4 -> 1.11 s
+  M = 8 -> 0.58 s
+  M = 16 -> 0.32 s
+  M = 20 -> 0.15 s
+
+- Test Case 3 (N = 200000) 
+  M = 1 -> 52.52 s
+  M = 4 -> 3.62 s
+  M = 8 -> 2.22 s
+  M = 10 -> 1.47 s
+
+- Test Case 4 (N = 400000) 
+  M = 1 -> 211.21 s
+  M = 4 -> 17.25 s
+  M = 5 -> 8.97 s
-- 
GitLab