• 数据结构与算法


    import time
    start_time=time.time()
    for a in range(0,1001):
        for b in range(0,1001):
            c=1000-a-b
            if a**2+b**2==c**2:
                print("a,b,c:%d,%d,%d"%(a,b,c))
    end_time=time.time()
    print("times:%d"%(end_time-start_time))
    
    #timeit模块
    from timeit import Timer#从timeit模块中导入Timer类
    def t1():
        li=[]
        for i in range(10000):
            li.append(i)
    def t2():
        li=[]
        for i in range(10000):
            li+=[i]
    def t3():
        [i for i in range(10000)]
    def t4():
        list(range(10000))
    def t5():
        li=[]
        for i in range(10000):
            li.extend([i])
    timer1=Timer('t1()','from __main__ import t1')#构造对象,第一个是调用函数的名字,第二个是调用函数的条件
    print("append:",timer1.timeit(1000))#使用对象的timeit方法,参数是函数跑多少次
    
    timer2=Timer('t2()','from __main__ import t2')
    print("+:",timer2.timeit(1000))
    
    timer3=Timer('t3()','from __main__ import t3')
    print("【】:",timer3.timeit(1000))
    
    timer4=Timer('t4()','from __main__ import t4')
    print("list:",timer4.timeit(1000))
    
    timer5=Timer('t5()','from __main__ import t5')
    print("extend:",timer5.timeit(1000))
    
    #single_link_like
    class Node (object):
        def __init__(self,elem):
            self.elem=elem
            self.next=None
    class SingleLinkList(object):
        def __init__(self,node=None):
            self.__head=node
        def is_empty(self):
            return self.__head==None
        def length(self):
            cur=self.__head
            count=0
            while cur!=None:
                count+=1
                cur=cur.next
            return count
        def travel(self):
            cur=self.__head
            while cur!=None:
                print(cur.elem,end=" ")
                cur=cur.next 
        def add(self,item):#头插法
            node=Node(item)
            node.next=self.__head
            self.__head=node
        def append(self,item):#尾插法
            node=Node(item)
            if self.is_empty():
                self.__head=node
            else:
                cur=self.__head
                while cur.next!=None:
                    cur=cur.next
                cur.next=node
        def insert(self,pos,item):
            if pos<=0:
                self.add(item)
            elif pos>(self.length()-1):
                self.append(item)
            else:  
                pre=self.__head
                count=0
                while count<(pos-1):
                    count+=1
                    pre=pre.next
                node=Node(item)
                node.next=pre.next
                pre.next=node
            
        def remove(self,item):
            cur=self.__head
            pre=None
            while cur!=None:
                if cur.elem==item:
                    if cur==self.__head:
                        self.__head=cur.next
                    else:
                        pre.next=cur.next
                else:
                    pre=cur
                    cur=cur.next
                break
        def search(self,item):
            cur=self.__head
            while cur!=None:
                if cur.elem==item:
                    return True
                else:
                    cur=cur.next
            return False
    if __name__=="__main__":
        ll=SingleLinkList()
        print(ll.is_empty())
        print(ll.length())
        ll.append(1)
        ll.append(2)
        ll.append(3)
        ll.append(4)
        ll.append(5)
        ll.add(8)
        print(ll.is_empty())
        print(ll.length())
        ll.insert(4,40)
        ll.travel()
    
    #双链表
    class Node(object):
        def __init__ (self,item):
            self.elem=item
            self.next=None
            self.prev=None
    class DoubleLinkList(object):
        def __init__(self,node=None):
            self.__head=None
        def is_empty(self):
            return self.__head is None
    
    #栈stack
    class Stack(object):
        def __init__(self):
            self.__list=[]
        def push(self,item):
            self.__list.append(item)
        def pop(self):
            return self.__list.pop()
        def peek(self):
            if self.__list:
                return self.__list[-1]
            else:
                return None
        def is_empty(self):
            return self.__list==[]
        def size(self):
            return len(self.__list)
    if __name__=="__main__":
        s=Stack()
        s.push(1)
        s.push(2)
        s.push(3)
        s.push(4)
        print(s.pop())
        print(s.pop())
        print(s.pop())
        print(s.pop())
    
    #队列
    class Queue(object):
        def __init__(self):
            self.__list=[]
        def enqueue(self,item):#加元素
            self.__list.append(item)
        def dequeue(self):#减元素
            return self.__list.pop(0)
        def is_empty(self):
            return self.__lsit==[]
        def size(self):
            return len(self.__list)
        
    if __name__=="__main__":
        s=Queue()
        s.enqueue(1)
        s.enqueue(2)
        s.enqueue(3)
        s.enqueue(4)
        print(s.dequeue())
        print(s.dequeue())
        print(s.dequeue())
        print(s.dequeue())
    
    #双端队列
    class Deque(object):
        def __init__(self):
            self.__list=[]
        def add_front(self,item):
            self.__list.insert(0,item)
        def add_rear(self,item):
            self.__list.append(item)
        def pop_front(self):
            return self.__list.pop(0)
        def pop_rear(self):
            return self.__list.pop()
        def is_empty(self):
            return self.__list==[]
        def size(self);
        return len(self.__list)
    if __name__=="__main__":
        s=Deque()
        s.enqueue(1)
        s.enqueue(2)
        s.enqueue(3)
        s.enqueue(4)
        print(s.dequeue())
        print(s.dequeue())
        print(s.dequeue())
        print(s.dequeue())
    
    #Bubble sort
    def bubble_sort(alist):
        for j in range(0,len(alist)-1):
            count=0
            for i in range(0,len(alist)-1-j):
                if alist[i]>alist[i+1]:
                    alist[i],alist[i+1]=alist[i+1],alist[i]
                    count+=1
            if count==0:
                return
    #select sort
    def select_sort(alist):
        n=len(alist)
        for j in range(0,n-1):
            min_index=j
            for i in range(j+1,n):
                if alist[min_index]>alist[i]:
                    min_index=i
            alist[min_index],alist[j]=alist[j],alist[min_index]
    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
                else:
                    break
    #希尔排序
    def shell_sort(alist):
        n=len(alist)
        gap=n//2
        while gap>=1:    
            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 merge_sort(alist):
        n=len(alist)
        if n <=1:
            return alist
        mid =n//2
        left_li=merge_sort(alist[:mid])
        right_li=merge_sort(alist[mid:])
        #将两个有序子序列合并为一个新的整体
        left_pointer,right_pointer=0,0
        result=[]
        while left_pointer<len(left_li) and right_pointer<len(right_li):
            if left_li[left_pointer]<right_li[right_pointer]:
                result.append(left_li[left_pointer])
                left_pointer+=1
            else:
                result.append(right_li[right_pointer]) 
                right_pointer+=1
        result+=left_li[left_pointer:]
        result+=right_li[right_pointer:]
        return result
    if __name__=="__main__":
        li=[54,26,93,17,77,31,44,55,20]
        print(li)
        #bubble_sort(li)
        #select_sort(li)
        #insert_sort(li)
        #shell_sort(li)
        #quick_sort(li,0,len(li)-1)
        li_2=merge_sort(alist)
        print(li_2)
        
    
    #二分查找;
    def binary_search(alist):
        
    

      

  • 相关阅读:
    限定类型后undefined变null
    学习进度条(第一周)
    记账本开发小计(三)
    记账本开发小计(四)
    记账本开发小计(五)
    个人作业1数组
    记账本开发小计(二)
    记账本开发小计(七)
    记账本开发小计(六)
    软件工程概论第一次课堂测试(实发项目的开发)总结
  • 原文地址:https://www.cnblogs.com/Turing-dz/p/13196122.html
Copyright © 2020-2023  润新知