【python】【算法练习】【插入排序】

插入排序
描述
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。

(1)算法步骤

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

(2)动图演示
在这里插入图片描述

(3)样例代码

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

算法练习:
题目:
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:
首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
【原始列表】
1 4 6 9 13 16 19 28 40 100 0
【插入一个数字】
7
【排序后列表】
1 4 6 7 9 13 16 19 28 40 100

# 0 作为加入数字的占位符
a = [1, 4, 6, 9, 13, 16, 19, 28, 40, 100, 0]
# print('原始列表:')
# for i in range(len(a)):
#     print(a[i])
number = int(input("插入一个数字:"))
end = a[9]
if number > end:
    a[10] = number
else:
    for i in range(10):
        if a[i] > number:
            temp1 = a[i]
            a[i] = number
            for j in range(i + 1, 11):
                temp2 = a[j]
                a[j] = temp1
                temp1 = temp2
            break
print('排序后列表:')
print(a)

你可能感兴趣的:(python排序算法,算法,排序算法,数据结构)