From 55539fbb18687ebaf6dcb4c767b46a10616c241a Mon Sep 17 00:00:00 2001 From: Nikolay Date: Fri, 21 Oct 2016 13:51:20 +0400 Subject: [PATCH 1/2] Add files via upload --- merger_sort.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 merger_sort.c diff --git a/merger_sort.c b/merger_sort.c new file mode 100644 index 0000000..76765e3 --- /dev/null +++ b/merger_sort.c @@ -0,0 +1,98 @@ +#include + +#define SIZE 8 + +int temp[SIZE] = {0}; + +void merge (int array[], int start_1, int end_1, int start_2, int end_2) +{ + int i = 0; + + // while there are elements in both subarrays + while ((start_1 <= end_1) && (start_2 <= end_2)) + { + // compare numbers at the start of the subarrays + if (array[start_1] > array[start_2]) + { + // append smaller to array + temp[i] = array[start_2]; + start_2++; + i++; + } + else + { + temp[i] = array[start_1]; + start_1++; + i++; + } + } + + // while elements remain in subbarray 2 + while ((start_1 > end_1) && (start_2 <= end_2)) + { + // append elements to array + temp[i] = array[start_2]; + i++; + start_2++; + } + + // while elements remain in subbarray 1 + while ((start_2 > end_2) && (start_1 <= end_1)) + { + // append elements to array + temp[i] = array[start_1]; + i++; + start_1++; + } + + //copy sorted values from the temp back to original array + for (i = 0; j < SIZE; i++) + { + array[i] = temp[i]; + } + +} + +void sort (int array[], int start, int end) +{ + if (end > start) + { + int middle = (start + end) / 2; + + // sort left half + sort(array, start, middle); + + // sort right half + sort(array, middle + 1, end); + + // merge the two halves + merge(array, start, middle, middle + 1, end); + } +} + +int main(void) +{ + int numbers[SIZE] = { 4, 15, 16, 50, 8, 23, 42, 108}; + + for (int i = 0; i < SIZE; i++) + { + printf("%i ", numbers[i]); + } + printf("\n"); + + sort(numbers, 0, SIZE - 1); + + /* + //copy sorted values from the temp array back to the original array + for (int i = 0; i < SIZE; i++) + { + numbers[i] = temp[i]; + } + */ + + for (int i = 0; i < SIZE; i++) + { + printf("%i ", numbers[i]); + } + printf("\n"); +} \ No newline at end of file From 61188c28d811c60e9c240b267c81ee1d75877097 Mon Sep 17 00:00:00 2001 From: Nikolay Date: Fri, 21 Oct 2016 14:00:26 +0400 Subject: [PATCH 2/2] Update merger_sort.c --- merger_sort.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/merger_sort.c b/merger_sort.c index 76765e3..a2059e4 100644 --- a/merger_sort.c +++ b/merger_sort.c @@ -46,7 +46,7 @@ void merge (int array[], int start_1, int end_1, int start_2, int end_2) } //copy sorted values from the temp back to original array - for (i = 0; j < SIZE; i++) + for (i = 0; i < SIZE; i++) { array[i] = temp[i]; } @@ -95,4 +95,4 @@ int main(void) printf("%i ", numbers[i]); } printf("\n"); -} \ No newline at end of file +}