In [3]:
def fib(n):
if n==0:
return 0
if n==1:
return 1
else:
return fib(n-1)+fib(n-2)
In [11]:
import time
t0=time.clock()
print fib(30)
t1=time.clock()
In [10]:
t1-t0
Out[10]:
In [30]:
known={0:0,1:1}
def fib2(n):
if n not in known:
known[n] = fib2(n-1)+fib2(n-2)
return known[n]
In [31]:
t0=time.clock()
print fib2(30)
t1=time.clock()
print t1-t0
In [64]:
A=[5, 20, 1, -4, 6, -6, 5, 5, 20, 1, -4, 6, -6, 5]
def insertionSort(A):
for i in range(len(A)):
j=i
while j>0 and A[j-1]>A[j]:
A[j-1], A[j]= A[j], A[j-1]
j-=1
return A
t0=time.clock()
print insertionSort(A)
t1=time.clock()
print t1-t0
In [70]:
def quickSort(A):
if len(A)<=1:
return A
else:
pivot=A[0]
#A=A[1:len(A)]
#left= [i for i in A if i<=pivot]
#right= [i for i in A if i > pivot]
left=[]
right=[]
for i in range(1,len(A)):
if A[i]<=pivot:
left.append(A[i])
else:
right.append(A[i])
left = quickSort(left)
right = quickSort(right)
return left + [pivot] + right
t0=time.clock()
print quickSort(A)
t1=time.clock()
print t1-t0
In [78]:
def merge(left,right):
if left[len(left)-1] <= right[0]:
return left + right
else:
a=0
b=0
result=[]
while a<len(left) and b<len(right):
if left[a]<=right[b]:
result.append[left[a]]
a+=1
else:
result.append[right[b]]
b+=1
def mergeSort(A):
if len(A)<=1:
return A
mid=len(A)//2
left=A[:mid]
right=A[mid:]
left=mergeSort(left)
right=mergeSort(right)
return merge(left,right)
t0=time.clock()
print mergeSort(A)
t1=time.clock()
print t1-t0
In [84]:
def bubbleSort(A):
for i in range(len(A)):
for j in range(1,len(A)-i):
if A[j-1]>A[j]:
A[j-1], A[j]= A[j], A[j-1]
return A
bubbleSort(A)
Out[84]:
In [ ]: