用指针合并两个有序数组

指针的意思是内存空间的地址。可以通过一个数组中每个元素的下标来找出它的值,所以存储这个元素位置的下标值的变量可以看作一个指针。
将这个概念来实现python中的指针问题,由于它不是真正意义上的指针,所以我们家他“模拟指针问题”。

有两个从小到大党的有序排列的数组:
1,3,4,6,10
2,5,8,11
第一个数组里有5个元素,第二个数组里有4个元素。要想把他们合并成一个性的从小到大排列的数组,实现编程如下:

源代码:

#用指针很冰两个有序数组
arr1 = [1,3,4,6,10]  #初始化两个数组
arr2 = [2,5,8,11]
ind = 0
ans = arr1.copy()#ans初始化为arr1
for i in range(0,len(arr2)):
    while ind < len(arr1):
        if arr2[i] <= arr1[ind]:#ind的范围不能超过数组元素下表的最大值
            ans.insert(ind + i,arr2[i])#向第一个数组中的合适位置插入第二个数组中的数
            break
        else:
            ind += 1#如果ind指向的数比i指向的数小,则ind向后一位
else:           #如果arr1  已遍历完,直接把剩下的arr2频道arr1结尾
    ans = ans + arr2[i:]
print(ans)

运行截图:
在这里插入图片描述

二分查找

用指针实现有序数组的二分查找。

二分查找:又叫做折半查找,意思是每次查找后,查找的范围都折半。这样查找到最后,查找范围之只剩一个数时,判断它是否为要查找的数,如果是就记录他的位置;如果不是,则要查找的数不在这个数组中。

需要两个指针,一个指向数组的第一个元素,叫做头指针;另一个指向数组最后一个元素的后方,叫做尾指针。

要用程序实现一个有15个元素的数组[1,3,5,6,7,8,13,14,15,17,18,24,30,43,56]的二分查找:

源代码:

#二分查找
numbers = [1,3,5,6,7,8,13,14,15,17,18,24,30,43,56]
head,tail = 0,len(numbers)   #数组长度刚好时最大下标值+1
search = int(input('enter a number to search:'))
while tail - head >1: #当尾指针tail减头指针head等于1时,查找范围内只有head指向的数
    mid = (head + tail) // 2  #mid存储中间数的下标,//2代表对/2的结果舍去分数部分取整
    if search < numbers[mid]:   #search时要搜索的元素,如果它小于mid指向的元素
        tail = mid
    if search > numbers[mid]:  #如果search大于mid指向的元素
        head = mid + 1  #mid指向的元素小于search,所有不用把它抱愧在范围内
    if search == numbers[mid]:
        ans = mid
        break      #找到元素的话就直接结束
else:
    if search == numbers[head]:
        ans = head
    else:
        ans = -1   #如果数组中没有这个元素,那么输出-1
print(ans)

运行截图:
在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐