summaryrefslogtreecommitdiff
path: root/src/03
diff options
context:
space:
mode:
Diffstat (limited to 'src/03')
-rw-r--r--src/03/sort.c19
-rw-r--r--src/03/sort_test.c10
2 files changed, 16 insertions, 13 deletions
diff --git a/src/03/sort.c b/src/03/sort.c
index 3391513..e0eb9b6 100644
--- a/src/03/sort.c
+++ b/src/03/sort.c
@@ -4,16 +4,19 @@ void _merge(int *items, int min, int mid, int max)
{
int length = (max-min) + 1;
int tmp[length];
+ int j = min, k = mid;
- int j = 0, k = 0;
for (int i = 0; i < length; i++) {
- if (items[min+j] < items[mid+k]) {
- tmp[i] = items[min+j];
- j++;
- } else {
- tmp[i] = items[mid+k];
- k++;
- }
+ if (j < mid && k <= max)
+ if (items[j] < items[k])
+ tmp[i] = items[j++];
+ else
+ tmp[i] = items[k++];
+ else
+ if (j >= mid)
+ tmp[i] = items[k++];
+ else
+ tmp[i] = items[j++];
}
for (int i = 0; i < length; i++)
diff --git a/src/03/sort_test.c b/src/03/sort_test.c
index caf863f..8c01b04 100644
--- a/src/03/sort_test.c
+++ b/src/03/sort_test.c
@@ -57,11 +57,11 @@ Ensure(merge_sort_sorts_many_items) {
assert_that(items[3], is_equal_to(3));
assert_that(items[4], is_equal_to(3));
assert_that(items[5], is_equal_to(4));
- /*assert_that(items[6], is_equal_to(5));*/
- /*assert_that(items[7], is_equal_to(5));*/
- /*assert_that(items[8], is_equal_to(5));*/
- /*assert_that(items[9], is_equal_to(6));*/
- /*assert_that(items[10], is_equal_to(9));*/
+ assert_that(items[6], is_equal_to(5));
+ assert_that(items[7], is_equal_to(5));
+ assert_that(items[8], is_equal_to(5));
+ assert_that(items[9], is_equal_to(6));
+ assert_that(items[10], is_equal_to(9));
}
TestSuite *sort_tests() {