You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改写插入排序的条件语句以消除重复代码?

优化插入排序代码以消除重复逻辑

你可以通过合并条件判断或者提取比较逻辑的方式消除重复代码,这里提供两种简洁的实现思路:

方案一:合并条件表达式

把两个分支的判断条件合并成一个统一的布尔表达式,直接提取重复的代码块,避免冗余:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:01:04