From 91338c362c090e73a30f6f36f5ab6342cf8bc05a Mon Sep 17 00:00:00 2001
From: 13513079 <13513079@hpc.if.itb.ac.id>
Date: Fri, 19 Feb 2016 11:38:31 +0700
Subject: [PATCH] Bucket sort (omp) done

---
 bucket_sort       | Bin 0 -> 17011 bytes
 bucket_sort_omp.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+)
 create mode 100755 bucket_sort
 create mode 100644 bucket_sort_omp.c

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

literal 0
HcmV?d00001

diff --git a/bucket_sort_omp.c b/bucket_sort_omp.c
new file mode 100644
index 0000000..1967e72
--- /dev/null
+++ b/bucket_sort_omp.c
@@ -0,0 +1,107 @@
+//Nama File : bucket_sort_omp.c
+//Oleh : Jessica Handayani 13513069 & Asanilta Fahda 13513079
+
+
+#include <omp.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#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() % (int)num_elements);
+        }
+        return rand_nums;
+}
+
+int** create_bucket_arrays(int num_buckets, int num_elements) {
+        int i;
+        int** bucket_arrays = (int**)malloc(sizeof(int*) * num_buckets);
+        for (i = 0; i < num_buckets; i++) {
+                bucket_arrays[i] = (int *)malloc(sizeof(int) * num_elements);
+        }
+        return bucket_arrays;
+}
+
+int* insertion_sort(int* elements, int num_elements){
+        int i,j;
+        int temp;
+        for(i = 0; i < num_elements; i++){
+                j = i;
+                while (j > 0 && elements[j] < elements[j-1]) {
+                        temp = elements[j];
+                        elements[j]   = elements[j-1];
+                        elements[j-1] = temp;
+
+                        j--;
+                }
+        }
+
+        return elements;
+
+}
+
+int main(int argc, char* argv[]) {
+        if (argc != 2){
+                fprintf(stderr, "Usage: num_elements\n");
+                exit(1);
+        }
+
+        double time = 0.0;
+        int thread_count = strtol(argv[1], NULL, 10);
+        int N;
+        printf("Enter N\n");
+        scanf("%d", &N);
+        int i;
+        int j;
+
+        //create array of N random numbers
+        int* rand_nums = create_rand_nums(N);
+        int** bucket_arrays = create_bucket_arrays(thread_count,N);
+        int* last_index = (int *)malloc(sizeof(int) * thread_count);
+
+        for (i = 0; i < thread_count; i ++) {
+            last_index[i] = 0;
+        }
+
+        int bucket_range = (N%thread_count == 0) ? N/thread_count : N/thread_count+1;
+
+        time -= omp_get_wtime();
+
+        int bucket;
+        //insert numbers to appropriate bucket arrays
+        for (i = 0; i < N; i++) {
+                bucket = rand_nums[i]/bucket_range;
+                bucket_arrays[bucket][last_index[bucket]++] = rand_nums[i];
+        }
+
+
+        //sort arrays in parallel
+        #  pragma omp parallel for num_threads(thread_count)
+            for (i = 0; i < thread_count; i++) {
+                bucket_arrays[i] = insertion_sort(bucket_arrays[i],last_index[i]);
+            }
+
+
+        //combine sorted arrays
+        int* sorted_array = (int *)malloc(sizeof(int) * N);
+        int last_sorted_index = 0;
+        for (i = 0; i < thread_count; i++) {
+            for (j = 0; j < last_index[i]; j++) {
+                sorted_array[last_sorted_index++] = bucket_arrays[i][j];
+            }
+        }
+        time += omp_get_wtime();
+        printf("Sorted: ");
+        for (i = 0; i < N; i++) {
+            printf("%d ",sorted_array[i]);
+        }
+        printf("\nTime : %lf s\n", time);
+
+
+}
+
-- 
GitLab