2016 - 2024

感恩一路有你

Python3实现折半查找

浏览量:2284 时间:2024-08-16 12:09:15 作者:采采

1. 简介

折半查找,也称二分罚查找,是一种针对有序数列进行查找的方法。与顺序查找相比,折半查找算法更高效。具体步骤如下:

1)对一个无序数列,首先要排序;

2)然后设定头尾两个指针,计算中间位置mid (头 尾) / 2;

3)用中间位置数值元素和目标值比较,如果中间元素正好是要查找的元素,则搜索过程结束;如果目标元素大于或者小于中间元素,则在数列大于或小于中间元素的那一半中继续查找,并且从新计算的中间元素开始比较。如果在计算得到数据为空,则代表没找到。折半查找的范围不断缩小一半,所以查找效率较高。

2. 输入随机数列并查找

假设我们有一个随机数列[6, 2, 7, 10, 23, 13, 15],我们要查找其中是否存在数字13。

首先,我们需要对数列进行排序,得到[2, 6, 7, 10, 13, 15, 23]。

然后,我们使用折半查找算法进行查找。经过三次处理后,我们找到了目标数据。

```python

import random

import time

import numpy as np

listNum [6, 2, 7, 10, 23, 13, 15] 示例例子

aimNum (listNum, k1)[0] 随机挑选一个目标数字

print(listNum, aimNum)

print("--------随机数列-----------")

listNumSort sorted(listNum)

print(listNumSort)

print("-------排序完成------------")

print(BinarySearch(listNumSort, aimNum))

```

3. 查找函数

下面是我们实现的折半查找函数,为了更清晰地展示每一步的操作,我们添加了注释。

```python

def BinarySearch(listNum, aimNum):

lowpos 0

highpos len(listNum) - 1

print("当前头坐标:lowpos {}, 尾坐标 highpos {}".format(lowpos, highpos))

i 0

while(1):

i 1

print("第 {} 趟".format(i))

if(lowpos < highpos):

midpos lowpos (highpos - lowpos) // 2

midNum listNum[midpos]

print(" ", end''')

print(listNum, aimNum)

print("当前头坐标lowpos {},尾

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。