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