如何改写插入排序的条件语句以消除重复代码?
优化插入排序代码以消除重复逻辑
你可以通过合并条件判断或者提取比较逻辑的方式消除重复代码,这里提供两种简洁的实现思路:
方案一:合并条件表达式
把两个分支的判断条件合并成一个统一的布尔表达式,直接提取重复的代码块,避免冗余:
def swap_elements(array, pos1, pos2): array[pos1], array[pos2] = array[pos2], array[pos1] # 列表是可变对象,修改后无需返回原数组,可移除return语句 def insertion_sort(array, method): i = 1 while i < len(array): key = array[i] j = 0 while j < i: # 合并升序/降序的判断逻辑 if (method and array[j] > key) or (not method and array[j] < key): key = array[j] swap_elements(array, i, j) j += 1 i += 1 return array
方案二:提取比较逻辑(更优雅)
提前根据排序方式定义一个比较函数,让内层循环的逻辑更简洁直观,后续修改排序规则也更方便:
def swap_elements(array, pos1, pos2): array[pos1], array[pos2] = array[pos2], array[pos1] def insertion_sort(array, method): # 根据method定义比较规则:True为升序(判断array[j] > key),False为降序(判断array[j] < key) compare = lambda a, b: a > b if method else a < b i = 1 while i < len(array): key = array[i] j = 0 while j < i: if compare(array[j], key): key = array[j] swap_elements(array, i, j) j += 1 i += 1 return array
额外优化建议
- 原
swap_elements函数不需要返回数组,因为列表是可变对象,函数内的修改会直接作用于原数组,去掉return语句更简洁。 - 建议把参数
method改名为ascending(布尔值,True表示升序),代码的可读性会大幅提升。
内容的提问来源于stack exchange,提问作者AlexMoreno
相关产品推荐
相关产品推荐

