diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/03/sort.c | 19 | ||||
| -rw-r--r-- | src/03/sort_test.c | 10 |
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() { |
