插入排序就像打扑克牌那样, 调整手中扑克牌的顺序。

我最开始写的版本

list_ = [2,1,7,4,9,3,5]

new_list = []
for n in list_:
    if new_list:
        for j in range(len(new_list)):  # 此处不能把new_list 做为循环对象, 
                                        # 因为下文会修改new_list,改循环len()
            if n < new_list[j]:
                new_list.insert(j, n)
                break
            if j == len(new_list) -1:
                new_list.insert(j+1, n)
    else:
        new_list.append(n)

print(new_list)

参考书上的第二版本

l = [2,1,7,4,9,3,5]


def insert_sort(lists):
    count = len(lists)
    for i in range(1, count):
        key = lists[i]
        j = i-1
        while j >=0:
            if lists[j] > key:
                lists[j + 1] = lists[j]
                lists[j] = key
            j -= 1
    return lists


if __name__ == "__main__":
    new_l = insert_sort(l)
    print(new_l)

第二种写法中, 用在原列表的位置互相交换元素的方法替代insert方法, 效率是要高很多的, 因为, 后面的元素不要往后移。

还有一种写法是,是我尝试把while 循环改称for 循环的例子

l = [2,1,7,4,9,3,5]


def insert_sort(lists):
    count = len(lists)
    for i in range(1, count):
        key = lists[i]
        for j in range(i-1):
            if key < lists[j]:
                lists[j], key = key, lists[j]
    return lists


if __name__ == "__main__":
    new_l = insert_sort(l)
    print(new_l)

标签: none

添加新评论