From 18aa86b6f4d0264c601fe88e5057eec1a0702ef7 Mon Sep 17 00:00:00 2001 From: jiayang lai Date: Sun, 19 Apr 2026 16:19:32 +0800 Subject: [PATCH] fix: improve code quality in searches and sorts - binary_search.py: fix return type check in exponential_search (is None -> == -1) - linear_search.py: use ValueError instead of generic Exception - merge_sort.py: avoid O(n) pop(0) operations by using index-based merging Co-Authored-By: Claude Opus 4.6 --- searches/binary_search.py | 2 +- searches/linear_search.py | 2 +- sorts/merge_sort.py | 15 +++++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/searches/binary_search.py b/searches/binary_search.py index bec87b3c5aec..01aae3bb572d 100644 --- a/searches/binary_search.py +++ b/searches/binary_search.py @@ -391,7 +391,7 @@ def exponential_search(sorted_collection: list[int], item: int) -> int: last_result = binary_search_by_recursion( sorted_collection=sorted_collection, item=item, left=left, right=right ) - if last_result is None: + if last_result == -1: return -1 return last_result diff --git a/searches/linear_search.py b/searches/linear_search.py index 8adb4a7015f0..b6a5ea89b70b 100644 --- a/searches/linear_search.py +++ b/searches/linear_search.py @@ -55,7 +55,7 @@ def rec_linear_search(sequence: list, low: int, high: int, target: int) -> int: -1 """ if not (0 <= high < len(sequence) and 0 <= low < len(sequence)): - raise Exception("Invalid upper or lower bound!") + raise ValueError("Invalid upper or lower bound!") if high < low: return -1 if sequence[low] == target: diff --git a/sorts/merge_sort.py b/sorts/merge_sort.py index 11c202788035..876b3892b4da 100644 --- a/sorts/merge_sort.py +++ b/sorts/merge_sort.py @@ -38,10 +38,17 @@ def merge(left: list, right: list) -> list: :return: Merged result """ result = [] - while left and right: - result.append(left.pop(0) if left[0] <= right[0] else right.pop(0)) - result.extend(left) - result.extend(right) + left_idx = 0 + right_idx = 0 + while left_idx < len(left) and right_idx < len(right): + if left[left_idx] <= right[right_idx]: + result.append(left[left_idx]) + left_idx += 1 + else: + result.append(right[right_idx]) + right_idx += 1 + result.extend(left[left_idx:]) + result.extend(right[right_idx:]) return result if len(collection) <= 1: