zoukankan      html  css  js  c++  java
  • 用python实现的常用算法

      1 ##乘法表
      2 
      3 def MultiplyTable():
      4     for x in range(1,10):
      5         for y in range(1,x+1):
      6             print "%s * %s = %2s" % (y,x,x*y) 
      7 
      8 #求平方
      9 def sqrt(n):
     10     if n>0:
     11         ans=0 
     12         while ans*ans<n:ans+=1
     13         if ans*ans!=n:
     14             print "n不是有完全开放数"
     15         else:
     16             print ans
     17     else:
     18         print "不能开放"    
     19 
     20 #折半搜索针对排过序的列表
     21 def bsearch(lst,val,start,end):
     22     if (end-start)<2:return lst[start]==val or lst[start]==val
     23     mid=start+(end-start)/2
     24     if lst[mid]==val:return True
     25     if val>lst[mid]:
     26         bsearch(lst,val,mid+1,end)
     27     else:
     28         bsearch(lst,val,start,mid-1)
    def bsearch(lst,val):
        start=0
        end=len(lst)-1
        while(start<=end):
    
            mid=start+(end-start)/2
    
            if lst[mid]<val:
                start=mid+1
    
            elif lst[mid]>val:
                end=mid-1
            else:
                return mid
        return "none"
    
    
    
     29         
     30 #选择排序O[n2]  
     31 def selSort(lst):
     32     for i in range(len(lst)-1):
     33         min=lst[i]
     34         minIdx=i
     35         j=i+1
     36         while j<len(lst):
     37             if lst[j]<min:
     38                 min=lst[j]
     39                 minIdx=j
     40             j=j+1
     41         temp=lst[i]
     42         lst[i]=lst[minIdx]
     43         lst[minIdx]=temp
     44         print lst
     45         
     46 #selSort([5,4,2,1])
     47 print "ssssssssssssssss"
     48 #冒泡排序 最坏O[n2]
     49 def bubbleSort(lst):
     50     flag=True
     51     while flag:
     52         flag=False
     53         for i in range(len(lst)-1):
     54             if lst[i]>lst[i+1]:
     55                 temp=lst[i]
     56                 lst[i]=lst[i+1]
     57                 lst[i+1]=temp
     58                 flag=True
     59     return lst
     60         
     61 #bubbleSort([5,4,2,1])
     62 print "ssssssssssssss"
     63
     1 #插入排序
     2 def InsertionSort(A):
     3     for j in range(1,len(A)):
     4         key = A[j]
     5         i = j-1
     6         #向前查找插入位置
     7         while i>=0 and A[i]>key:
     8             A[i+1] = A[i]
     9             i = i-1
    10         A[i+1] = key
     64 #归并排序
     65 
     66 def merge(left,right):#合并
     67     res=[]
     68     i,j=0,0
     69     while i<len(left) and j<len(right):
     70         if left[i]<=right[j]:
     71             res.append(left[i])
     72             i+=1
     73         else:
     74             res.append(right[j])
     75             j+=1
     76             
     77     while i<len(left):
     78         res.append(left[i])
     79         i+=1
     80     while j<len(right):
     81         res.append(right[j])
     82         j+=1
     83     return res
     84 
     85 def mergeSort(lst):
     86 #    print "start",lst
     87     if len(lst)<2:
     88         return lst[:]
     89     else:
     90         mid=len(lst)/2
     91         left=mergeSort(lst[:mid])
     92 #        print "left",left
     93         right=mergeSort(lst[mid:])
     94 #        print "right",right
     95         together=merge(left,right)
     96 
     97 #        print "later",together
     98         return together
     99         
    100 #mergeSort([5,4,2,1])
    101 #快排
    102

    该方法的基本思想是:

    1.先从数列中取出一个数作为基准数。

    2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

    3.再对左右区间重复第二步,直到各区间只有一个数。

    103 def quicksort(data, low = 0, high = None):
    104     if high == None:
    105         high = len(data) - 1
    106     if low < high:
    107         s, i, j = data[low], low, high
    108         while i < j:
    109             while i < j and data[j] >= s:
    110                 j = j - 1
    111             if i < j:
    112                 data[i] = data[j]
    113                 i = i + 1
    114             while i < j and data[i] <= s:
    115                 i = i + 1
    116             if i < j:
    117                 data[j] = data[i]
    118                 j = j - 1
    119         data[i] = s
    120         quicksort(data, low, i - 1)
    121         quicksort(data, i + 1, high)
    122     return data
    123 
    124 import random,datetime
    125 import copy      
    126 data=[random.randint(1,5) for i in range(2000)]#如果有大量重复数据,归并效率最高
    127 
    128 def sort_perfmon(sortfunc, data):
    129     sort_data = copy.deepcopy(data)
    130     t1 = datetime.datetime.now()
    131     sortfunc(sort_data)
    132     t2 = datetime.datetime.now()
    133     print sortfunc.__name__, t2 - t1
    134 
    135 sort_perfmon(quicksort, data)
    136 sort_perfmon(bubbleSort, data)
    137 sort_perfmon(mergeSort, data)
    138 
    139 
    140 
    141          
    142 def mean( sorted_list ):
    143     if not sorted_list:
    144         return (([],[]))
    145     big = sorted_list[-1]
    146     small = sorted_list[-2]
    147     big_list, small_list = mean(sorted_list[:-2])
    148     big_list.append(small)
    149     small_list.append(big)
    150     big_list_sum = sum(big_list)
    151     small_list_sum = sum(small_list)
    152     if big_list_sum > small_list_sum:
    153         return ( (big_list, small_list))
    154     else:
    155         return (( small_list, big_list))
    156 
    157 a=[2,1,3,4]
    158 b=[3,5,7,8]
    159 
    160 #sorted=sorted((a+b))
    161 #print sorted
    162 #print mean(sorted)      
    163           
    164 def fibnaci():
    165     a,b=0,1
    166     while True:
    167         yield b
    168         a,b=b,a+b 
    169         
    170 def fib(x):
    171     if x == 0 or x == 1: return 1
    172     else: return fib(x-1) + fib(x-2)   
  • 相关阅读:
    docker命令(二)
    吴裕雄--天生自然WEB前端开发实战--JavaScript语言
    吴裕雄--天生自然WEB前端开发实战--HTML--CCS页面布局
    吴裕雄--天生自然WEB前端开发实战--HTML--CCS
    吴裕雄--天生自然WEB前端开发实战--HTML--表格与表单
    吴裕雄--天生自然WEB前端开发实战--HTML基础--2
    吴裕雄--天生自然WEB前端开发实战--HTML基础
    吴裕雄--天生自然python数据可视化--NetworkX精美网络图绘制
    线性求逆元
    Linux:linux服务器稳定性压力测试工具stress安装与使用
  • 原文地址:https://www.cnblogs.com/aveenzhou/p/2673898.html
Copyright © 2011-2022 走看看