算法导论学习之旅(python实现)

第二章

均为个人实现,没有完全按照书中方式去做,因为感觉书中算法实现太多是按照C的方式,如果按部就班按照它的思路写代码,没有完全体现Python语言特征,因此我的算法主要是针对python语言特性来做的。

  1. 插入排序
    算法导论学习之旅(python实现)_第1张图片
def insert_sort(list):
    i=0
    for j in range(1,len(list)):
        key=list[j]
        i=j-1
        while(i>0 & list[i]>key):
            list[i+1]=list[i]
            i=i-1
        list[i+1]=key
        return

2.递归插入实现

#思路是正确的。然而切片不支持深拷贝,所以运行有误,后一种类似于java版本的写法
'''
def insert_digui_sort(list):
    if(len(list)>1):
        key = list[-1]
        insert_digui_sort(list[:-1])
    #digui
        length=len(list)-2
        while(list[length]>key and length>-1):
            list[length+1]=list[length]
            length=length-1
        list[length+1]=key
'''


def insert_recursion_sort(list,n):
    if(n>1):
        n=n-1
        insert_recursion_sort(list,n)
    #digui
        length=n-1
        key = list[length+1]
        while(list[length]>key and length>-1):
            list[length+1]=list[length]
            length=length-1
        list[length+1]=key

    if (n==len(list)-1):
        return list
    else:
        return

3.二分查找

def binary_find(value,list):
    length=len(list)
    start=0
    end=length-1
    mid=(int)((start+end)/2)
    while(1):
        if(list[mid]==value):
            return mid
        if(list[mid]>value):
            end=mid-1
            mid = (int)((start + end) / 2)
        else:
            start=mid+1
            mid = (int)((start + end) / 2)

4.二分查找递归版

def binary_recur_find(value,list):
    length = len(list)
    start=0
    end=length-1
    def find(start,end):
        mid = (int)((start + end ) / 2)
        if(list[mid]==value):
            return mid
        if(list[mid]>value):
            end=mid-1
            return find(start, end)
        else:
            start=mid+1

            return find(start, end)
    return find(start,end)

网上找的简洁写法

> def binary_find(value,list):
    low=0;
    high=len(list)-1
    while(low<=high):
        mid=int((low+high)/2)
        if(value==list[mid]):
            return mid
        if(value > list[mid]):
            low=mid+1
        elif(value < list[mid]):
            high=mid-1

5.分治之合并排序算法导论学习之旅(python实现)_第2张图片
需要会推复杂度
算法导论学习之旅(python实现)_第3张图片

def merge_sort(li):
    def divide(li):
        if(len(li)>1):
            l1=li[0:(int)(len(li)/2)]
            l2=li[(int)(len(li)/2):]
        else:
            return li
        return merge(divide(l1),divide(l2))
    def merge(list1,list2):
        len1=len(list1)
        len2=len(list2)
        li=[]
        m=0
        n=0
        i=0
        while(i<len1+len2 and m<len1 and n<len2):
            if list1[m]<=list2[n]:
                li.append(list1[m])
                m=m+1
                i=i+1
            elif(list1[m]>list2[n]):
                li.append(list2[n])
                n=n+1
                i = i + 1
        if(m<len1):
            li.extend(list1[m:])
        elif(n<len2):
            li.extend(list2[n:])
        return li
    return divide(li)

算法上本人依然是菜鸟,如有疏漏,恳请指正。

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