排序算法之归并排序

归并排序

归并排序是分治方法一个典型应用。归并排序首先是递归分散数组,再合并。将数组分解成最小之后,合并成有俩个有序的数组,基本思想就是比较两个有序数组最前面的数,谁小先去谁,然后对应的数组的指针后移一位,继续比较,直到一个数组取完为止,最后把剩余的部分全部取出。

算法分析:

 

Python 源代码:

class Solutions(object):
    '''
        这是一个归并排序算法
    '''
    def merge_sort(self,left,right):
        ''' 
            将两个有序的序列合并成一个有序序列
        '''
        i,j = 0, 0
        res = []
        while i < len(left) and j < len(right):
            # 当两个数组都没取完时
            if left[i] < right[j]:
                res.append(left[i])
                i += 1
            else:
                res.append(right[j])
                j += 1
        # 只要一个取完时,但是并不知道是哪一个数组
        res += left[i:]
        res += right[j:]
        return res

    def merge(self,List):
        # 归并算法,递归实现
        if len(List) <= 1:
            return List
        else:
            mid = len(List)//2
            left = self.merge(List[:mid])
            right = self.merge(List[mid:])
            return self.merge_sort(left,right)

if __name__ == "__main__":
    List = [4,3,6,5,8,0,1,9,7,2]
    sol = Solutions()
    res = sol.merge(List)
    print(res)                    # 结果为: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

归并排序:

        时间复杂度:O(nlogn)

       空间复杂度:O(n)

       稳定性:稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值