python实现常用排序算法

半夜醒来,闲来无事,写写排序算法,兴之所致,未来得及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)
    
     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值