针对的是b站视频-算法大神左神(左程云)算法课程第一节相关算法

视频笔记在这里
1. 选择排序
import random
class Test():
def main(self):
"""
对数器,用于检查两个算法的输出是否完全相同
:return: None
"""
test_times = 10000
max_size = 100
max_value = 100
for _ in range(test_times):
arr1 = self.generate_random_array(max_size, max_value)
arr2 = arr1.copy()
my_sort = mySolution()
my_sort.selectSort(arr1)
self.compareSolution(arr2)
succeed = arr1==arr2
print("成功!" if succeed else "错了错了。。。")
def generate_random_array(self, max_size, max_val):
"""
生成一个数组:数组的大小随机,每个值随机
:param max_size:
:param max_val:
:return: List[int]
"""
array = []
size = random.randint(0, max_size)
for _ in range(size):
array.append(random.randint(0, max_val))
return array
def compareSolution(self, array):
"""
用于对比的 系统自带排序算法
:param array:
:return: None
"""
array.sort()
class mySolution():
def selectSort(self, array):
"""
自己编写的排序算法
:param array:
:return: None
"""
if len(array) < 2:
return
for i in range(len(array)):
j = i + 1
min_idx = i
while j < len(array):
min_idx = j if array[j] < array[min_idx] else min_idx
j += 1
self.swap(array, i, min_idx)
def swap(self, array, idx1, idx2):
array[idx1], array[idx2] = array[idx2], array[idx1]
if __name__ == '__main__':
test = Test()
test.main()
2. 冒泡排序
import random
class mySort():
def bubbleSort(self, array):
"""
自己的冒泡排序
:param array: List[int]
:return: None
"""
if len(array) < 2: return
i = len(array) - 1
while i > 0:
for j in range(i):
if array[j] > array[j+1]:
self.swap(array, j, j+1)
i -= 1
def swap(self, array, idx1, idx2):
"""
交换数组array中索引为idx1和idx2的数的位置,原地操作
:param array: List[int]
:param idx1: int
:param idx2: int
:return: None
"""
array[idx1], array[idx2] = array[idx2], array[idx1]
class test():
def main(self):
test_times = 10000
max_size = 100
max_value = 100
for _ in range(test_times):
arr1 = self.generate_random_array(max_size, max_value)
arr2 = arr1.copy()
tmp = arr1.copy()
function1 = mySort()
function1.bubbleSort(arr1)
self.compareFunction(arr2)
succeed = arr1 == arr2
if not succeed:
print("出错记录\n待排序数组={}\nmyFunction结果={}\ncompareFunction结果={}".format(
tmp, arr1, arr2
))
print("成功!" if succeed else "Maybe something's wrong...")
def generate_random_array(self, max_size, max_value):
"""
生成size在[0, max_size]范围,每个值在[0, max_value]范围的数组
:param max_size: int
:param max_value: int
:return: List[int]
"""
array = []
size = random.randint(0, max_size)
for _ in range(size):
array.append(random.randint(0, max_value))
return array
def compareFunction(self, array):
"""
python自带的排序算法,属于稳定排序
:param array: List[int]
:return: None
"""
array.sort()
if __name__ == '__main__':
bubbleSorttest = test()
bubbleSorttest.main()
3. 异或运算
a = 12
b = 23
print("a={}\tb={}".format(a, b))
a = a^b
b = a^b
a = a^b
print("a={}\tb={}".format(a, b))
4. 插入排序
import random
class mySort():
def insertSort(self, array):
"""
插入排序--自己的版本
:param array: List[int]
:return: None
"""
if len(array) < 2: return
i = 1
while i < len(array):
j = i
while j > 0 and array[j] < array[j-1]:
self.swap(array, j, j-1)
j -= 1
i += 1
def swap(self, array, idx1, idx2):
"""
交换数组array的位置在idx1和idx2的两个数
:param array: List[int]
:param idx1: int
:param idx2: int
:return: None
"""
array[idx1], array[idx2] = array[idx2], array[idx1]
class test():
def main(self):
"""
对数器,用于对比两个方法的输出是否完全一样
用于生成随机数组array,其size和每个值都是随机生成的
:return: None
"""
test_times = 10000
max_size = 100
max_value = 100
for _ in range(test_times):
arr1 = self.generate_random_array(max_size, max_value)
arr2 = arr1.copy()
tmp = arr1.copy()
my_sort = mySort()
my_sort.insertSort(arr1)
self.compareSolution(arr2)
succeed = arr1 == arr2
if not succeed:
print("待排序数组={}\nmySort后={}\ncompareSort后={}".format(
tmp, arr1, arr2
))
print("Congratulations!" if succeed else "Maybe something's wrong...")
def generate_random_array(self, max_size, max_value):
"""
用于生成随机数组array,其size和每个值都是随机生成的
:param max_size: int
:param max_value: int
:return: List[int]
"""
arr = []
size = random.randint(0, max_size)
for _ in range(size):
arr.append(random.randint(0, max_value))
return arr
def compareSolution(self, array):
"""
这里采用python自带的排序工具,属于稳定排序
:param array: List[int]
:return: None
"""
array.sort()
if __name__ == '__main__':
test_insrtSort = test()
test_insrtSort.main()
5. 求最大值
import random
class mySolution():
def getMax(self, array):
"""
求最大值-自己的版本
:param array: List[int]
:return: int
"""
if len(array) == 0: return None
return self.process(array, 0, len(array)-1)
def process(self, array, left, right):
"""
求最大值-利用递归行为
:param array: List[int]
:param left: int
:param right: int
:return: int
"""
if left == right: return array[left]
mid = left + ((right-left)>>1)
left_max = self.process(array, left, mid)
right_max = self.process(array, mid+1, right)
return max(left_max, right_max)
class test():
def main(self):
"""
对数器,用于测试两个方法输出是否一致
:return:None
"""
test_times = 10000
max_size = 100
max_value = 100
for _ in range(test_times):
array = self.generate_random_array(max_size, max_value)
mine = mySolution()
my_max = mine.getMax(array)
test_max = self.compareSolution(array)
succeed = my_max==test_max
if not succeed:
print("array={}\nmy_max={}\ntest_max={}".format(
array, my_max, test_max
))
print("Congratulations!" if succeed else "Sorry...")
def generate_random_array(self, max_size, max_value):
"""
生成随机数组,size随机,其中每个值也随机
:param max_size: int
:param max_value: int
:return: List[int]
"""
array = []
size = random.randint(0, max_size)
for _ in range(size):
array.append(random.randint(0, max_value))
return array
def compareSolution(self, array):
"""
python自带的求最大值的工具
:param array: List[int]
:return: int
"""
if len(array) == 0:return None
return max(array)
if __name__ == '__main__':
get_max = test()
get_max.main()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)