半夜醒来,闲来无事,写写排序算法,兴之所致,未来得及debug, 有问题自己解决。
# -*- coding: utf-8 -*-
"""
Created on Tue May 19 00:52:47 2015
冒泡排序:
插入排序:
1、每一步就像在一首已经排序的扑克牌中再插入一张牌,这张牌标记为value
2、从最后一张开始比较,如果小于,对应的牌往后挪一位
3、找到位置以后把value牌放在对于的地方
快速排序:
理解递归的含义,以fibonacci函数为例,老大向小弟要数,层层下压,直到碰到return
小弟将数层层计算回传。
归并排序:
和快速类似,只要定义好了归并的方法(merge_method)
@author: zhu
"""
import numpy as np
def bubble(arr):
for i in range(len(arr))[::-1]:
for j in range(i):
if arr[j]<arr[j+1]:
arr[j],arr[j+1]=arr[j+1],arr[j] #swwap it
return arr
def insertion(arr):
for i in range(len(arr)):
index=i
value=arr[i]
while i>=0 and arr[index]<value: #compare with the predecessor
arr[index+1]=arr[index]
index-=1
arr[index]=value
return arr
def quick(arr):
if len(arr)<2:
return arr
pivot=arr[0]
less=[x for x in arr if arr<=pivot]
greater=[x for x in arr if arr>pivot]
return less + [pivot] + greater
def merge(arr):
if len(arr)<2:
return arr
l=arr[:len(arr)/2]
r=arr[len(arr)/2:]
merge(l)
merge(r)
return merge_method(l,r)
def merge_method(l,r):
tmp,index1,index2=[],0,0
for i in range(len(l)):
if index1<len(l)/2 and index2<len(r):
if l[index1]< r[index2]:
tmp.append(l[index1])
index1+=1
else:
tmp.append(r[index2])
index2+=1
elif index1==len(l/2):
tmp.extend(r[index2:])
else:
tmp.extend(l[index1:])
return tmp
if __name__=='__main__':
arr=np.random.randint(100,size=10)
print arr,quick(arr)