前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># 归并排序(2-路归并排序)

# 归并排序(2-路归并排序)

作者头像
用户1175783
发布2019-09-10 14:38:44
5380
发布2019-09-10 14:38:44
举报

# 归并排序(2-路归并排序)

# 原理

代码语言:javascript
复制
将无序集合拆分成只有一个元素的有序集合,然后两两合并排序,直到合成一个包涵所有元素的有序集合。
代码语言:javascript
复制
原始集合:{5,2,4,6,8,1,9,7,10,3}
拆分直到只要一个元素的集合:
{5,2,4,6,8,1,9,7,10,3} => {5}{2}{4}{6}{8}{1}{9}{7}{10}{3}
合并排序:
{5}{2}{4}{6}{8}{1}{9}{7}{10}{3}=>{5,2}{4,6}{8,1}{9,7}{10,3}=>{2,5}{4,6}{1,8}{7,9}{3,10}
再次合并:
{2,5}{4,6}{1,8}{7,9}{3,10}=>{2,5,4,6}{1,8,7,9}{3,10}=>{2,4,5,6}{1,7,8,9}{3,10}
再次合并:
{2,4,5,6}{1,7,8,9}{3,10}=>{2,4,5,6,1,7,8,9}{3,10}=>{1,2,4,5,6,7,8,9}{3,10}
最后合并:
{1,2,4,5,6,7,8,9}{3,10}=>{1,2,4,5,6,7,8,9,3,10}=>{1,2,3,4,5,6,7,8,9,10}

# 实现

代码语言:javascript
复制
inputArr = [199383, 10, 34, -1, -32, -29, 4,
            0, 34, 5, 4, 36, 1, 8, 123, 453, 1008]

length = len(inputArr)
print("未排序集合:{0}".format(inputArr))
gap=1
groupCount = length
while(groupCount>=1):
    if(groupCount<length):
        for gapIndex in range(0, groupCount):
            startIndex = gapIndex*gap
            endIndex = ((startIndex+gap) if((startIndex+gap) < length) else length)
            for index in range(startIndex, endIndex): 
                for maxIndex in range(startIndex+1, endIndex-index):
                    if(inputArr[maxIndex-1] > inputArr[maxIndex]):
                        inputArr[maxIndex-1], inputArr[maxIndex] =\
                            inputArr[maxIndex], inputArr[maxIndex-1]
    # 最后一次分组合并排序时groupCount一定为1,执行完此次排序后排序结束,break跳出while循环借宿排序
    if(groupCount==1):
        break
    # 就近两个集合的元素个数
    gap *= 2
    # 如果元素个数大于长度则设置为元素个数,避免gap>length
    gap=(gap if(gap<length) else length)
    groupCount=length//gap+length % gap
print("已排序集合:{0}".format(inputArr))
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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