python 算法学习部分代码记录篇章1
# -*- coding: utf-8 -*- # @Date : 2017-08-19 20:19:56 # @Author : lileilei '''那么算法和数据结构是什么呢,答曰兵法''' '''a+b+c=1000 and a*a+b*b=c*c 求a,b,c''' # import time # start_time=time.time() # for a in range(1000):#使用枚举法 # for b in range(1000): # for c in range(1000): # if a+b+c==1000 and a*a+b*b==c*c: # print(a,b,c) # print(time.time()-start_time) # import time #方法2 # start_time=time.time() # for a in range(1000): # for b in range(1000): # c=1000-a-b # if a+b+c==1000 and a*a+b*b==c*c: # print(a,b,c) # print(time.time()-start_time) class Stack(object): """栈""" def __init__(self): self.__items = [] def is_empty(self): """判断是否为空""" return self.__items == [] def push(self, item): """加入元素""" self.__items.append(item) def pop(self): """弹出元素""" return self.__items.pop() def peek(self): """返回栈顶元素""" return self.__items[len(self.__items)-1] def size(self): """返回栈的大小""" return len(self.__items) # if __name__ == "__main__": # stack = Stack() # stack.push("hello") # stack.push("world") # stack.push("itcast") # print (stack.size()) # print (stack.peek()) # print (stack.pop()) # print (stack.pop()) # print (stack.pop()) class Queue(object): '''队列''' def __init__(self): self.__list=[] def addqueue(slef,item): #self.__list.append(item) self.__list.insert(0,item) def dequeue(self): return self.__list.pop() def is_empty(self): return self.__list==[] def size(self): return len(self.__list) class Dqueue(object): '''双端队''' def __init__(self): self.__list=[] def add_front(slef,item): self.__list.insert(0,item) def add_re(self,item): self.__list.insert(item) def dequeue(self): return self.__list.pop() def requeue(self): return self.__list.pop(0) def is_empty(self): return self.__list==[] def size(self): return len(self.__list) def buule_sor(alist):#冒泡 n=len(alist) for i in range(n-1): for j in range(n-1-i): count=0 if alist[j]>alist[j+1]: alist[j],alist[j+1]=alist[j+1],alist[j] count+=1 if 0==count: return def select_sort(alist):#选择排序 n=len(alist) for j in range(n-1): min=j for i in range(j+1,n): if alist[min] > alist[i]: min=i alist[j],alist[min]=alist[min],alist[j] def insert_sort(alist):'''插入排序''' n=len(alist) for j in range(1,n): i=j while i>0: if alist[i]<alist[i-1]: alist[i],alist[i-1]=alist[i-1],alist[i] i-=1 def shell_sort(alist):'''希尔排序''' n=len(alist) gap=n//2 while gap>0: for j in range(gap,n): i=j while i>0: if alist[i]<alist[i-gap]: alist[i],alist[i-gap]=alist[i-gap],alist[i] i-=gap else: break gap//=2 def quick_sort(alist,first,last):'''快速排序''' if first>=last: return mid_value=alist[first] low=first high=last while low<high: while low <high and alist[high]>=mid_value: high-=1 alist[low]=alist[high] while low <high and alist[low]<mid_value: low+=1 alist[high]=alist[low] alist[low]=mid_value quick_sort(alist,first,low-1) quick_sort(alist,low+1,last) def me_sort(alist):'''归并排序''' n=len(alist) if n<=1: return alist mid=n//2 left=me_sort(alist[:mid]) right=me_sort(alist[mid:]) left_point,right_porint=0,0 result=[] while left_point<len(left) and right_porint<len(right): if left[left_point] <right[right_porint]: result.append(left[left_point]) left_point+=1 else: result.append(right[right_porint]) right_porint+=1 result+=left[left_point:] result+=right[right_porint:] return result def binary_search(alist,item):#二分查找 递归 n=len(alist) if n>0: mid=n//2 if alist[mid]==item: return True elif item<alist[mid]: return binary_search(alist[:mid],item) else: return binary_search(alist[mid+1:],item) return False def brin_serce2(alist,item):#二分非递归 n=len(alist) first=0 lasr=n-1 while first <=lasr: mid = (first + lasr) // 2 if alist[mid]==item: return True elif item<alist[mid]: lasr=mid-1 else: first=mid+1 return False if __name__ == '__main__': listy=[54,67,76,23,34] print(brin_serce2(listy,55))
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?