算法-归并排序

归并排序

  • 思路
归并排序采用的是分治的思想,将一个 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))

你可能感兴趣的:(算法,算法)