diff --git a/omp_bucket b/omp_bucket new file mode 100755 index 0000000000000000000000000000000000000000..36f09b9d2ef0b1b9f5598333201e7f95f2378f90 Binary files /dev/null and b/omp_bucket differ diff --git a/omp_bucket.c b/omp_bucket.c new file mode 100644 index 0000000000000000000000000000000000000000..8a9b800655f6081b67abf87da93b925a7ad37b9b --- /dev/null +++ b/omp_bucket.c @@ -0,0 +1,90 @@ +#include <stdio.h> +#include <stdlib.h> +#include <omp.h> +#define MAX_VALUE 10000 + +void bucket_sort(int* sorted_array, int element_num); /* Thread function */ +void insertion_sort(int* sorted_array, int size); + + +int main(int argc, char *argv[]) { + + int i; + + // Num of threads + int thread_count = atoi(argv[1]); + // Num of elements + int element_num = atoi(argv[2]); + + int range = MAX_VALUE / thread_count; + + // Seed + srand(time(NULL)); + + // Bucket + //int* bucket = (int *)malloc(sizeof(int) * element_num); + //memset (bucket, 0, (sizeof(int) * element_num)); + + // Sorted Array + int* sorted_array = (int *)malloc(sizeof(int) * element_num); + memset (sorted_array, 0, (sizeof(int) * element_num)); + + // Do bucket sort + #pragma omp parallel num_threads(thread_count) + bucket_sort(sorted_array, element_num); + + for (i=0;i<element_num;i++){ + printf("%d ", sorted_array[i]); + } + return 0; +} + +void insertion_sort(int* sorted_array, int size) +{ + int n, array[size], c, d, t; + + + int my_rank = omp_get_thread_num(); + int thread_count = omp_get_num_threads(); + n = thread_count+1; + + printf("%d\n", my_rank); + + for (c = 0; c < size; c++) { + array[c] = rand() % (size) + (my_rank)*size; + printf("before sort : %d\n", array[c]); + } + + // Sorting + for (c = 1 ; c <= size - 1; c++) { + d = c; + + while ( d > 0 && array[d] < array[d-1]) { + t = array[d]; + array[d] = array[d-1]; + array[d-1] = t; + + d--; + } + } + + for (c=0;c<size;c++){ + printf("%d",array[c]); + +} + + memcpy(&array, sorted_array+(my_rank * size), size); + +} + +void bucket_sort(int* sorted_array, int element_num) { + int my_rank = omp_get_thread_num(); + int thread_count = omp_get_num_threads(); + + int bucket_size = element_num / thread_count; + + insertion_sort(sorted_array, bucket_size); + + + +} diff --git a/omp_hello b/omp_hello new file mode 100755 index 0000000000000000000000000000000000000000..a745d655107f106dae2b35d5377a94038a452a42 Binary files /dev/null and b/omp_hello differ