用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)   
原文地址:https://www.cnblogs.com/aveenzhou/p/2673898.html