python笔试题

冒泡排序的原理:每次对相邻的两个元素进行比较,若前者大于后者,这将两者的位置交换。第一轮就可以将最大的元素置于列表的最后。几轮循环

冒泡排序的前提条件:有序的列表

import unittest
# 冒泡排序

def bubble_sort(arr):
for i in range(len(arr) - 1): #这个循环负责设置冒泡排序进行的次数
for j in range(len(arr) - 1 - i): #j为下标
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr

class SortTesrCase(unittest.TestCase):

def test_bubble_sort(self):
test_data_1 = [4,5,1,2,3]
copy_test_data_1 = test_data_1[:]

bubble_sort(test_data_1)
copy_test_data_1.sort()

self.assertEqual(test_data_1,copy_test_data_1)

if __name__ == '__main__':
unittest.main()


二分查找

有序列表中,顺序查找需要从一端到另一端按照顺序进行查找,最多需要比较n次。二分查找从中间项开始

如果该项是我们目标项,则完成查找;如果目标项大于中间项,则可以消除中间项及比中间项目小的那一部分;反之,消除中间项目及比中间项目比较大的那一部分,之后再次重复上面过程。

import unittest

def bin_search(arr, target):
length = len(arr)
mid = length // 2 # 找到中间元素

if (length == 1 and arr[0] != target) or length == 0 : # 目标元素不存在
return False

if arr[mid] == target: # 如果该元素等于目标元素
return True

if target > arr[mid]: # 如果目标元素大于中间元素
print(arr[mid+1:])
return bin_search(arr[mid+1:], target) # 在列表的右半边递归进行二分查找
else: # 小于的情况
return bin_search(arr[:mid], target) # 在列表的左半边递归进行二分查找


class BinSearchTestCase(unittest.TestCase):

def test_bin_search(self):
test_data = [9, 5, 2, 7] # 测试数据
test_data.sort() # 先排序

self.assertEqual(bin_search(test_data, 2), True)
self.assertEqual(bin_search(test_data, 9), True)
self.assertEqual(bin_search(test_data, 1), False)
self.assertEqual(bin_search(test_data, 999), False)


if __name__ == '__main__':
unittest.main()




原文地址:https://www.cnblogs.com/zyblb/p/11095979.html