python 插入排序

问题:数组排序

插入排序,向已经有序一组序列中,插入一个新的元素
默认第一个列表元素为已经排序好的元素,从第二个元素进行比较,
已经排序好的元素,重大到小,依次进行比较,最后得到结果

import traceback


def insert_sort(wait_sort_data: list, reverse=True):
    """
    插入排序的实现
    :param wait_sort_data: 待排序的列表数据
    :param reverse: 是否反序操作
    :return:
    """
    try:
        if not wait_sort_data:
            raise Exception('当前要排序的列表为空,请检查')
        if reverse:
            for index in range(1, len(wait_sort_data)):
                key = wait_sort_data[index]
                upper_index = index - 1
                while upper_index >= 0 and wait_sort_data[upper_index] > key:
                    wait_sort_data[upper_index + 1] = wait_sort_data[upper_index]
                    upper_index -= 1
                wait_sort_data[upper_index + 1] = key
        else:
            for index in range(len(wait_sort_data) - 2, -1, -1):
                key = wait_sort_data[index]
                after_index = index + 1
                while after_index < len(wait_sort_data) and wait_sort_data[after_index] > key:
                    wait_sort_data[after_index - 1] = wait_sort_data[after_index]
                    after_index += 1
                wait_sort_data[after_index - 1] = key
        return wait_sort_data
    except Exception as e:
        if str(e).count('请检查'):
            raise e
        raise Exception(str(e) + '插入排序实现发生异常,原因:{}'.format(traceback.format_exc()))


if __name__ == "__main__":
    new_data = insert_sort([1, 500, 487, 0, 792, 12, 654, 438, 78, -123, -345], reverse=False)
    print(new_data)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值