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

python 归并排序

时间:2019-09-30 20:05:03      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:添加   and   提前   while   合并   不能   coding   行合并   end   

#!/usr/bin/python
#coding=UTF-8
#思路:前提是此列表的必须是已经排好序的(例如:[2,4,5,7,1,3,6,8]),
#分为两部分 ,从开始到中间,从中间到最后开始比较,然后进行加到列表后面,肯定有一边提前结束,结束后直接将剩余的列表加入到列表中就行
def merge(li,low,mid,high): #这里传的是索引
    i = low 
    j = mid+1 #获取后半部分的开始
    ltmp = [] #将取出的值先放在的临时内存中
    while i <= mid and j <= high:
        if li[i] < li[j]: #如果第一部分的第i个值小于 第二部分的第j个值 则把值加入临时列表中
            ltmp.append(li[i])
            i +=1
        else :
            ltmp.append(li[j]) #否则就把 第二部分的第j个值 则把值加入临时列表中
            j +=1
    while i<=mid: #犹豫不确定那边有值 所以创建两个循环 将剩余的部分以循环方式添加到临时列表
        ltmp.append(li[i])
        i += 1
    while j<=high:
        ltmp.append(li[j])
        j +=1

def merge_sort(li,low,high):
    if low < high:
        mid = (low+high) // 2
        merge_sort(li,low,mid)
        merge_sort(li,mid+1,high)
        merge(li,low,mid,high) #每次的递归后的部分已经不能在进行递归(分割)了时候进行合并,合并后即为有序的列表

                

 #时间复杂度:O(nlogn)
 #空间复杂度 O(n) 开辟了一个新的空间

python 归并排序

标签:添加   and   提前   while   合并   不能   coding   行合并   end   

原文地址:https://www.cnblogs.com/ikai/p/11613870.html

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