前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># 实现原理

# 实现原理

作者头像
用户1175783
发布2019-09-10 14:41:20
2760
发布2019-09-10 14:41:20
举报

# 实现原理

代码语言:javascript
复制
将数组分为两部分,左边为有序集合,右边为无序集合,
取右边集合的第一个元素与左边集合的中间位置开始对比,直到插入合适的位置后退出比较。
这种方式与直接排序基本一致,不同之处是判断应该插入中间位置的左边还是右边。

# 原理图

暂无

# 实现

代码语言:javascript
复制
inputArr = [10, 34, 29, 4, 0, 34, 5,4,36, 1, 8]

length = len(inputArr)
print("未排序集合:{0}".format(inputArr))
# 从第1个元素开始作为无须集合
for rightIndex in range(1, length):
    insertItem=inputArr[rightIndex]
    startIndex=0
    endIndex=rightIndex-1
    # 查找最后一个中间位置
    while(startIndex!=endIndex):       
        midIndex =startIndex + (endIndex-startIndex)//2
        if(inputArr[midIndex]>insertItem):
            endIndex=midIndex
        else:
            startIndex=midIndex+1
    # 计算待插入的位置
    insertIndex=startIndex+(0 if(insertItem<inputArr[startIndex]) else 1)
    # 如果待插入位置等于当前位置则不需要移动
    if(insertIndex==rightIndex):
        continue
    # 向后平移元素
    while (insertIndex!=rightIndex):
        inputArr[rightIndex]=inputArr[rightIndex-1]
        rightIndex-=1
    # 插入正确的位置
    inputArr[insertIndex] = insertItem

print("已排序集合:{0}".format(inputArr))
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 实现原理
  • # 原理图
  • # 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档