面试练习题汇总
  • 说明
  • C/C++ 问答题汇总
  • 编程题汇总
    • 腾讯 2017 暑期实习生编程题
      • 构造回文
      • 算法基础-字符移位
      • 有趣的数字
    • 剑指 Offer 编程题练习
      • 二维数组中的查找
      • 从尾到头打印链表
      • 旋转数组的最小数字
      • 替换空格
      • 用两个栈实现队列
      • 重建二叉树
    • 网易 2017 校招笔试编程题
      • 二进制权重
      • 平方串
      • 数位和
  • 安全测试开发相关面试
    • 安全测试类面试参考
    • 业务安全类面试参考
    • 测试开发类面试参考
  • 深信服sangfor相关
    • 深信服acm相关
    • 测试类面试参考
    • 智安全杯
      • 智安全杯-2018比赛
      • 智安全杯-2019初赛
      • 智安全杯-2019复赛
  • 软件测试题汇总
  • 计算机知识题汇总
    • 前 75 题
    • 75 题以后
  • Python 语言特性
    • 1 Python的函数参数传递
    • 2 @staticmethod和@classmethod
    • 3 类变量和实例变量
    • 4 Python中单下划线和双下划线
    • 5 args and *kwargs
    • 6 面向切面编程AOP和装饰器
    • 7 单例模式
    • 8 Python 函数式编程
    • 9 Python 里的拷贝
  • stackoverflow-about-Python
    • Python中关键字yield有什么作用?
    • [Python中的元类(metaclass)是什么?](stackoverflow-about-Python/Python中的元类(metaclass)是什么.md)
    • Python中如何在一个函数中加入多个装饰器?
    • 如何判断一个文件是否存在?
    • 如何调用外部命令?
    • 枚举类型的使用?
    • 在Windows下安装pip?
    • 字典合并问题
    • 在Android上运行Python
    • 根据字典值进行排序
    • 在函数里使用全局变量
    • 变化的默认参数
    • 装饰器classmethod和staticmethod的区别
    • 检查列表为空的最好办法
    • 怎么用引用来改变一个变量
    • 检查文件夹是否存在的操作
    • name=main的作用
    • super与init方法
    • str与repr的区别
    • 循环中获取索引
    • 类里的静态变量
    • 怎么在终端里输出颜色?
    • 为什么用pip比用easy_install的好?
    • join的问题
    • 把列表分割成同样大小的块
    • 为什么代码在一个函数里运行的更快
    • 如何快速合并列表中的列表?
    • 如何知道一个对象有一个特定的属性?
    • 如何通过函数名的字符串来调用这个函数?
    • 单下划线和双下划线的含义?
  • Python 面试编程题
    • 1 台阶问题 斐波那契
    • 2 变态台阶问题
    • 3 矩形覆盖
    • 4 杨氏矩阵查找
    • 5 去除列表中的重复元素
    • 6 链表成对调换
    • 7 创建字典的方法
    • 8 合并两个有序列表
    • 9 二分查找
    • 10 快排
    • 11 找零问题
    • 12 二叉树相关
    • 13 单链表逆置
Powered by GitBook
On this page
  • 题目
  • merge_sort.py
  • 单元测试

Was this helpful?

  1. Python 面试编程题

8 合并两个有序列表

题目

考归并排序的两种实现方式, 一种递归一种循环

merge_sort.py

#!/bin/env python3
# -*- coding: utf-8 -*-
# version: Python3.X

__author__ = '__L1n__w@tch'


def recursion_merge_sort(list1, list2, a_list):
    def __recursion(list_wait_to_sort_1, list_wait_to_sort_2, list_after_sort):
        if len(list_wait_to_sort_1) == 0 or len(list_wait_to_sort_2) == 0:
            list_after_sort.extend(list_wait_to_sort_1)
            list_after_sort.extend(list_wait_to_sort_2)
            return list_after_sort
        elif list_wait_to_sort_1[0] < list_wait_to_sort_2[0]:
            list_after_sort.append(list_wait_to_sort_1[0])
            del list_wait_to_sort_1[0]  # 为啥不用 list1.pop(0)...
        elif list_wait_to_sort_1[0] >= list_wait_to_sort_2[0]:
            list_after_sort.append(list_wait_to_sort_2[0])
            del list_wait_to_sort_2[0]
        return __recursion(list_wait_to_sort_1, list_wait_to_sort_2, list_after_sort)

    return __recursion(list1, list2, list())


def loop_merge_sort(list1, list2):
    after_sort = list()
    while len(list1) > 0 and len(list2) > 0:
        if list1[0] < list2[0]:
            after_sort.append(list1[0])
            del list1[0]
        else:
            after_sort.append(list2[0])
            del list2[0]
    after_sort.extend(list1)
    after_sort.extend(list2)
    return after_sort


if __name__ == "__main__":
    List1 = sorted([3, 4, 1, 2])
    List2 = sorted([2, 1, 1, 1])

    test_list = recursion_merge_sort(List1[::1], List2[::1], list())
    print(test_list)

    test_list = loop_merge_sort(List1, List2)
    print(test_list)

单元测试

#!/bin/env python3
# -*- coding: utf-8 -*-
# version: Python3.X
""" 测试归并排序是否正确
"""
import random
import unittest
from merge_sort import recursion_merge_sort, loop_merge_sort


__author__ = '__L1n__w@tch'


class TestMergeSort(unittest.TestCase):
    def test(self):
        for i in range(5):
            wait_to_sort = sorted([random.randint(-1000, 1000) for i in range(100)])
            wait_to_sort_2 = sorted([random.randint(-1000, 1000) for i in range(100)])

            after_sort = sorted(wait_to_sort + wait_to_sort_2)

            self.failUnless(after_sort == recursion_merge_sort(wait_to_sort[::1], wait_to_sort_2[::1], list()))
            self.failUnless(after_sort == loop_merge_sort(wait_to_sort[::1], wait_to_sort_2[::1]))


if __name__ == "__main__":
    pass
Previous7 创建字典的方法Next9 二分查找

Last updated 5 years ago

Was this helpful?