算法

1.二分查找算法
(递归)

def binary_search(al,item):
    """binary_search"""
    n = len(al)
    if n > 0:
        mid = n//2
        if al[mid] == item:
            return True
        elif item < al[mid]:
            return binary_search(al[:mid],item)
        else:
            return binary_search(al[mid+1:],item)
    return False

if __name__ == "__main__":
    al = [24,27,38,44,49,66,73,89,93]
    print(binary_search(al,93))

(非递归)

def binary_search(al,item):
    """binary_search"""
    n = len(al)
    first = 0
    last = n - 1
    while first <= last:
        mid = (first + last) // 2
        if al[mid] == item:
            return True
        elif item < al[mid]:
            last = mid - 1
        else:
            first = mid + 1
    return False

if __name__ == "__main__":
    al = [24,27,38,44,49,66,73,89,93]
    print(binary_search(al,93))

2.归并排序
算法思想:
将一行数字,在中间进行分裂成两部分,两两分开,以此递归。
当各自为队伍时,两两组队比对大小并排序,以此类推。
Eg:
一 83461479
二 8346 1497
三 83 46 14 97
四 8 3 4 6 1 4 9 7
五 38 46 14 79
六 3468 1479
-----| -----| 游标
左边的游标在第一位处与后面的右边所在的第一位处比较,将小的拿出来,拿出来后,游标后移一位,以此类推
七 13446789
代码

# coding:utf-8
def merger_sort(alist):
    """merger sort"""
    n = len(alist)
    if n <= 1:
        return alist

    mid = n // 2
    #it will be create a new list after merger sort in left
    left_li = merger_sort(alist[:mid]) # it can not contaion the alist[mid]
    #it will be create a new list after merger sort in right
    right_li = merger_sort(alist[mid:]) # it can contaion the alist[mid]

    #maka a new list that use the ordered sequence
    left_pointer , right_pointer = 0 , 0
    result = []

    while left_pointer < len(left_li) and right_pointer <= len(right_li):
        if left_li[left_pointer] < right_li[right_pointer]:
            result.append(left_li[left_pointer])
            left_pointer += 1
        else:
            result.append(right_li[right_pointer])
            right_pointer += 1

    result += left_li[left_pointer:]
    result += right_li[right_pointer:]
    return result

if __name__ == "__main__":
    alist = [24,27,38,44,49,66,73,89,93]
    result = merger_sort(alist)
    print(result)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容