在Python中怎么用二分法插入一个新的数到数组列表

接昨天的把一个数插入到有序的数组、列表中,我们今天使用二分法来,就好比一个队分成2个队,因为有序的么,先比较中间的,得到结果,只要比较一个方向的一半就可以了,这样一来是不是减少一半的时间,节约是运行时间,提高是效率,这个方法还是应该去熟练的。

所以这样来进行比较,可以快速定位,尤其企业中数据很庞大的时候,我们就要选择这样适合大数据的方法,一些数据量少的情况,用啥方法区别都不大的。

下面我们先定义2个函数,一个用二分法去找位置,一个插入到这个位置

定义二分查找方法

def ef_insert_index(y_numarr, new_num):#用定义个二分查找的方法
    left, right = 0, len(y_numarr)#初始下,在比较中不停的变化
    while left < right:
        mid = (left + right) // 2
        if y_numarr[mid] < new_num:
            left = mid + 1
        else:
            right = mid
    return left

定义个插入方法

def insert_binary(y_numarr, new_num):#插入也搞个
    index = ef_insert_index(y_numarr, new_num)
    y_numarr.insert(index, new_num)
    return y_numarr

还是用之前的例子,我们来看看,是不是一样呢?

arr = [1, 3, 5, 7, 9]
num = 6
print(insert_binary(arr, num))  # 输出: [1, 3, 5, 6, 7, 9]

运行下看看

我们再测试下一个数,检验一下哎,确保代码的准确性。

num2=11
print(insert_binary(arr, num2))  # 输出: [1, 3, 5, 6, 7, 9]

运行看看


看运行情况,还是没啥问题的。说明是可以使用的啦。


相关文章

Python算法:4.寻找两个正序数组的中位数

题目:寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log(m+n...

Python实现【分割数组的最大差值】

n = int(input()) nums = list(map(int, input().split())) total_sum = sum(nums) max_diff = 0 left_sum...

Python实现【找出两个整数数组中同时出现的整数】

from collections import defaultdict import sys def solve(): # 读取输入 arr1 = list(map(int, sys...

Python实现分治算法?

分治算法(Divide and Conquer Algorithm)是一种设计算法的策略,它将一个问题分成多个相似的子问题,递归地解决这些子问题,然后将结果合并以得到原问题的解。典型的分治算法包括归并...

【找出两个整数数组中同时出现的整数】Python实现

from collections import Counter def find_common_elements(arr1, arr2): # 统计数组中每个数字的出现次数 coun...