插入排序

插入排序(Insertion Sort):
输入:乱序n长数组
输出:排序好的n长数组
时间复杂度:O(n^2)
空间复杂度:O(1)


插入排序原理与冒泡排序和选择排序(关于这两种排序见我上一篇博客)是类似的,都是通过多次对数组扫描完成,不同的是,插入排序需扫描的部分数组的长度是不断递增的,因为它是通过不断向已经排序好的数组中插入新的元素完成排序的,随着插入元素的递增,数组长度递增。具体来说过程如下:


1. 从第1个元素开始,该元素可认为已排序
2. 取下一个元素,对已排序数组从后往前扫描
3. 若从排序数组中取出的元素大于新元素,则移至下一位置
4. 重复步骤3,直到找到已排序元素小于或等于新元素的位置
5. 插入新元素至该位置
6. 重复2~5


这个过程有点像我们打扑克时的“理牌”,我们不断拿到新牌,然后按照某种规律将新牌“插入”到我们手上有的,已经排好的牌当中。


def insertion_sort(aList):
    # n长数组
    n = len(aList)  
    # cur代表现在需要插入的元素的下标
    for cur in range(1, n):
        # index代表需要扫描的数组部分元素的下标,index递减,是一个从后往前扫描的过程
        index = cur - 1
        # temp代表现在需要插入的元素的值
        temp = aList[cur]
        # 从后往前扫描
        while index >= 0:
            if aList[index] > temp:
                aList[index], aList[index + 1] = aList[index + 1], aList[index]
            index -= 1

时间复杂度的推导与冒泡排序,选择排序一样,略。

你可能感兴趣的:(算法,python,插入排序,排序算法)