当前位置: 首页 » 综合知识 » it知识 » 正文

Python二分查找和冒泡算法怎么用

发布时间:2023-07-22 以下文章来源于网友投稿,内容仅供参考!

# 二分法查找 有序序列中的值

def binary_search(sorted_seq, val):

    """复杂度 O(log(N))"""

    if not len(sorted_seq):

        return 'Not Find'

    low = 0

    high = len(sorted_seq) - 1

    while low <= high:

        mid = (high + low) // 2

        if sorted_seq[mid] == val:

            return mid

        elif sorted_seq[mid] > val:  # 说明 在 low - mid

            high = mid - 1

        else:  # 说明 在 mid - high

            low = mid + 1

    #  如果还存在特殊情况? val 不在其中的时候 比如 【1,3,4】 val=2

    if sorted_seq[low] == val:

        return low

    else:

        return 'Not Find'

# 冒泡排序

def bubble_sort(seq):

    """

    拿出一个数 和其余的数目依次比较 如果 发现大于其中的一个数 就立刻互换位置 复杂度 O(n^2)

    :param seq:

    :return:

    """

    n = len(seq)

    for i in range(n):

        for j in range(n-1):

            if seq[i] > seq[j]:

                seq[i], seq[j] = seq[j], seq[i]

# 插入排序

def insertion_sort(seq):

    """一次拿出一个数 到 已经排序的数组里面 按顺序插入"""

    n = len(seq)

    for i in range(1, n):

        cur_val = seq[i]

        cur_pos = i

        #  向左遍历查找 发现小于的就互换位置

        while cur_pos and cur_val < seq[cur_pos - 1]:

            seq[cur_pos] = seq[cur_pos - 1]

            cur_pos -= 1  # 继续向左偏移

        seq[cur_pos] = cur_val

# 归并排序

def merge_sort(seq):

    """ 分解元素 分别排序 最后合在一起  复杂度 O(nlogn)"""

    n = len(seq)

    if n < 2:

        return seq

    l_arr = seq[:n//2]

    r_arr = seq[n//2:]

    new_l_arr = merge_sort(l_arr)

    new_r_arr = merge_sort(r_arr)

    new_array = []

    while 1:

        if not len(new_l_arr):

            new_array += new_r_arr

            return new_array

        if not len(new_r_arr):

            new_array += new_l_arr

            return new_array

        if new_r_arr[0] < new_l_arr[0]:

            new_array.append(new_r_arr[0])

            new_r_arr.pop(0)

        else:

            new_array.append(new_l_arr[0])

            new_l_arr.pop(0)

if __name__ == '__main__':

    seq = [1,7,4,2,5,3,9,6,8]

    src = merge_sort(seq)

    print(src)

  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师