测试开发常见算法题

发布时间 2023-11-16 09:47:57作者: tt_贝塔

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 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

3. 字符串组合-递归

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

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

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

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

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

4.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]

"""

4.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

4.3 生成器

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

# 使用生成器
generator = number_generator(5)
for num in generator:
    print(num)