测试开发常见算法题

1.冒泡排序

def faet_sort(test: list) -> list:
    """冒泡排序"""
    for i in range(len(test)):
        for j in range(len(test)-i-1):
            if test[j] > test[j + 1]:
                test[j], test[j + 1] = test[j + 1], test[j]
    return test

2.二分法

def binary_search(arr: list[float], target: float):
    """查找索引的位置"""
    low = 0
    high = len(arr) - 1
    while low <= high:
        mid = (low + high) // 2
        # 如果中间元素等于目标值,则返回其索引
        if arr[mid] == target:
            return mid
        # 如果中间元素大于目标值,则在左半部分继续查找
        elif arr[mid] > target:
            high = mid - 1
        # 如果中间元素小于目标值,则在右半部分继续查找
        else:
            low = mid + 1
    # 如果未找到目标值,则返回-1
    return -1

3.数组排序

def list_test(x: list) -> list:
    """基数在前, 偶数在后"""
    x.sort()
    rs1 = list()
    rs2 = list()
    for i in x:
        if i % 2 == 1:
            rs1.append(i)
        else:
            rs2.append(i)
    rs1.extend(rs2)
    return rs1

4. 字符串组合-递归

def test_string(x: str) -> list:
    if len(x) == 1:
        return [x]

    # 用于存储所有排列结果的列表
    all = []
    # 对于字符串中的每个字符,依次将其作为首字符,然后递归地求解剩余字符的排列
    for i in range(len(x)):
        start_char = x[i]
        end_char = x[:i] + x[i+1:]
        sub_chars = test_string(end_char)

        # 将首字符与剩余字符的排列组合起来
        for sub_char in sub_chars:
            all.append(start_char+sub_char)

    return all

5. 迭代器、装饰器、生成器

迭代器(Iterator)是一种对象,可以通过迭代协议(即实现了 iter() 和 next() 方法)来遍历容器中的元素。迭代器可以逐个地访问容器中的元素,而不需要事先知道容器的大小。迭代器提供了一种统一的方式来遍历不同类型的数据结构,例如列表、字典、集合等。

装饰器(Decorator)是一种用于修改函数或类行为的特殊函数。装饰器可以在不修改原始函数或类定义的情况下,通过添加额外的功能来扩展其行为。装饰器常用于日志记录、性能分析、缓存等方面。装饰器使用了函数作为参数,并返回一个新的函数,这样可以方便地对函数进行包装和修改。

生成器(Generator)是一种特殊的函数,可以通过 yield 语句来生成一个序列的值。生成器可以逐个地产生值,而不需要一次性生成所有值,这样可以节省内存空间。生成器非常适合处理大量数据或者需要延迟计算的情况。

5.1 迭代器

class Book(object):
    """迭代器"""
    def __init__(self):
        self.book = ["java" , "python", "go", "vue"]
        self.cur_index = -1

    def __iter__(self):
        return self

    def __next__(self):
        if self.cur_index == len(self.book) - 1:
            raise StopIteration()
        self.cur_index += 1
        return self.book[self.cur_index]

"""

5.2 装饰器

def sum_time(func):
    """统计函数执行耗时"""
    def wrapper(*args, **kwargs):
        start_time = time()
        result = func(*args, **kwargs)
        end_time = time()
        return f"func 函数结果: {result}\n执行的耗时为: {end_time-start_time}s"
    return wrapper

@sum_time
def count(n):
    """装饰器"""
    s = 0
    for i in range(1, n+1):
        s += i ** 2
    return s

5.3 生成器

def number_generator(n):
    i = 1
    while i <= n:
        yield i
        i += 1

# 使用生成器
generator = number_generator(5)
for num in generator:
    print(num)
posted @ 2023-11-16 09:42  tt_贝塔  阅读(53)  评论(0编辑  收藏  举报