diff --git a/Laporan IF3230 - OpenMP.docx b/Laporan IF3230 - OpenMP.docx
new file mode 100644
index 0000000000000000000000000000000000000000..f5dcad5c1aa0fb20f84d6016cdc2e7e33dd903de
Binary files /dev/null and b/Laporan IF3230 - OpenMP.docx differ
diff --git a/omp_bucket_sort b/omp_bucket_sort
new file mode 100755
index 0000000000000000000000000000000000000000..3f42cb2cc943d486486df188f82c1575e6f3fe50
Binary files /dev/null and b/omp_bucket_sort differ
diff --git a/omp_bucket_sort.c b/omp_bucket_sort.c
index 2b55b6880f5211214f3f3e711f0c55879789a940..fdc9c68979e74e5c326c30a50736f4f719412498 100644
--- a/omp_bucket_sort.c
+++ b/omp_bucket_sort.c
@@ -93,20 +93,28 @@ int main(int argc, char** argv) {
 	int counter;
 
 	time_t start_t;
-	start_t  = clock(); 
   
 	int *sorted_array = NULL;
-	int *arr =(int *)malloc(sizeof(int) * num_element); 
-#pragma omp parallel for num_threads(thread_count) shared(rand_nums)
+	int *arr =(int *)malloc(sizeof(int) * num_element);
+	int *arr_final = (int *)malloc(sizeof(int) * num_element);
+	int arr_counter = 0;
+	start_t  = clock(); 
+	#pragma omp parallel for num_threads(thread_count) shared(rand_nums, arr_counter, arr_final)
 	for (counter = 1;counter<thread_count;counter++) {
 		
 		int size_arr ;		
 		make_bucket(rand_nums,arr,&size_arr,num_element,counter,thread_count);
 		sorted_array = sort_array(arr,size_arr);
-		print_array(sorted_array, size_arr);
+		int j = 0;
+		for(int i = arr_counter; i < arr_counter+size_arr; i++) {
+			arr_final[i] = sorted_array[j];
+			j++;
+		}
+		arr_counter += size_arr;
 	}
-
     time_t finish_t = clock();
+	print_array(arr_final, num_element);
+
     printf("Waktu eksekusi %d data : %d process : %.5f ms\n", num_element, thread_count, (double)(finish_t-start_t)*1000/CLOCKS_PER_SEC);
    
 	free(rand_nums);