码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序

时间:2020-04-12 20:54:54      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:return   一个   def   lse   bre   排序   乱序   图片   位置   

插入排序

  • 插入排序

  • 思路:

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

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

    • 注意:初始情况下,有序部分为乱序序列的第一个元素,无序部分为乱序序列的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,跳出循环。就这样前面的都是有序序列了,慢慢的都会变成全部有序。效率上比冒泡和选择快,为啥自己想。

插入排序

标签:return   一个   def   lse   bre   排序   乱序   图片   位置   

原文地址:https://www.cnblogs.com/zzsy/p/12687097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!