算法-归并排序

归并排序

  • 思路
归并排序采用的是分治的思想,将一个 n 长度的数组不断的分成无数个小数组,然后对小数组进行排序,
最后将所以的有序小数组合并,最终数组有序。
  • 算法复杂度

    归并排序的平均复杂度: O(n) = nlogn, 最坏时间复杂度为:O(n) = nlogn

  • 算法空间复杂度

    归并排序的空间复杂度: O(n) = n

python实现
# 递归实现
import random
def merge(arr,first,mid,last):
    fore_part = arr[first:mid+1]
    last_part = arr[mid+1:last+1]
    index = first 
    k = 0;
    m = 0;
    while( k <  len(fore_part)):
        while(m < len(last_part)):
            if  fore_part[k] > last_part[m]:
                arr[index] = last_part[m]
                index+=1
                m+=1
            elif fore_part[k] < last_part[m]:
                arr[index] = fore_part[k]
                index+=1
                k+=1
                break;
            else:
                arr[index] = last_part[m]
                arr[index+1] = fore_part[k]
                index+=2
                m+=1
                k+=1
        if ( m >= len(last_part)): 
                arr[index] = fore_part[k]
                index+=1
                k+=1;
    if m < len(last_part):
        for j in range(m,len(last_part)):
            arr[index] = last_part[j]
            index+=1

def merge_sort(arr,first,last):
    mid = int((first+last)/2)
    if first < last:
        merge_sort(arr,first,mid)
        merge_sort(arr,mid+1,last)
        merge(arr,first,mid,last)
    return arr

us = [1,2,0,-1]
us1 = [6,8,0,2,1]
us2 = [9,8,7,6,5,4,3,2,1,0]
print(merge_sort(us,0,len(us)-1))
print(merge_sort(us1,0,len(us1)-1))
print(merge_sort(us2,0,len(us2)-1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值