插入排序

Posted zzsy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序相关的知识,希望对你有一定的参考价值。

插入排序

  • 插入排序

  • 思路:

    • 需要将原始序列分成两部分:有序部分,无序部分

    • 将无序部分中的元素逐一插入到有序部分中

    • 注意:初始情况下,有序部分为乱序序列的第一个元素,无序部分为乱序序列的n-1个元素

    • 乱序序列:[3,8,5,7,6]

    • [3,8,,,,5,7,6]

    • [3,5,8,,,,7,6]

    • [3,5,7,8,,,,6]

    • [3,5,6,7,8,,,]

    • 定义一个变量i,i表示的是有序部分元素的个数&无序部分第一个元素下标。

#step1:
#[31,   8,5,7,6]
i = 1 #i就是有序部分元素的个数&&无序部分第一个元素下标
#alist[i-1]:有序部分最后一个元素下标
#alist[i]:无序部分第一个元素下标
if alist[i-1] > alist[i]:
    alist[i],alist[i-1] = alist[i-1],alist[i]
    #[8,31,   5,7,6]
#step 2:[8,31,   5,7,6]
i = 2
#alist[i-1]:有序部分最后一个元素下标
#alist[i]:无序部分第一个元素下标
while i>0:
    if alist[i-1] > alist[i]:
        #循环第一次执行[8,5,31,   7,6]
        alist[i-1],alist[i] = alist[i],alist[i-1] 
        i -= 1
        #循环继续执行
        #[5,8,31,   7,6]
    else:
        break
i = 3
#alist[i-1]:有序部分最后一个元素下标
#alist[i]:无序部分第一个元素下标
while i>0:
    if alist[i-1] > alist[i]:
        alist[i-1],alist[i] = alist[i],alist[i-1] 
        i -= 1
    else:
        break
#step 3:
#处理变量i,需要让i进行自己递增
for i in range(1,len(alist)): #i = 1,2,3,4
    #alist[i-1]:有序部分最后一个元素下标
    #alist[i]:无序部分第一个元素下标
    while i>0:
        if alist[i-1] > alist[i]:
            alist[i-1],alist[i] = alist[i],alist[i-1] 
            i -= 1
        else:
            break
#完整代码
alist = [3,8,5,7,6]
def sort(alist):
    for i in range(1,len(alist)):
        while i>0:
            if alist[i-1] > alist[i]:
                alist[i-1],alist[i] = alist[i],alist[i-1] 
                i -= 1
            else:
                break
    return alist
#    
print(sort(alist))
[3, 5, 6, 7, 8]

技术图片
总结:以上图为例,当你第一次外层循环时,i**为1(咱们设置的range(1,len(alist))), 索引 i-1 跟 i 比较,当 i-1的元素大于 i 的元素,交换位置。就变成5 8 4 11 10 ,然后i = 2时, i -1的元素就是索引为1,跟索引为2的比较,如果索引为1的大于为2的,继续交换位置,得到5 4 8 11 10 ,没完呢,然后让 i -1 ,循环继续让索引为0的元素跟刚交换完位置的索引变成1的元素比较,就是5 跟4 再比较,如果 索引为1的小于索引为0的,再交换位置,但是上图4小于5,所以会继续交换位置,得到4 5 8 11 10。如果不是就break,跳出循环。就这样前面的都是有序序列了,慢慢的都会变成全部有序。效率上比冒泡和选择快,为啥自己想。

以上是关于插入排序的主要内容,如果未能解决你的问题,请参考以下文章

KDoc:插入代码片段

代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?

将代码片段插入数据库并在 textarea 中以相同方式显示

关于在各浏览器中插入音频文件的html代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段