熟悉排序算法

冒泡排序

def bubble_sort(data):
    u"""
    冒泡排序
    """
    for i in range(len(data)-1): 
        #一次循环下来,最大的就在最后面了。
        for j  in range(len(data) - i -1): 
             if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1] , data[j]

    return data

if __name__ == "__main__":
    import random
    
    data = []
    for i in range(10):
        data.append(random.randint(1,100))
    print("source data======",data)
    result = bubble_sort(data)
    print("sort result data====",result)

快速排序

 

# -*- coding: utf-8 -*-


def quick_sort(q):
    if not q:
        return []
    
    m = q.pop()
    left_q = []
    right_q = []
    for e in q:
        if e>m:
            right_q.append(e)
        else:
            left_q.append(e)
            
    left_result =  quick_sort(left_q)
    
    right_result = quick_sort(right_q)
    
    return left_result + [m] + right_result


if __name__ == "__main__":
    u"""
    1、列表 2、字符串 3、树 4、图
    """
    import random
    q = []
    for i  in range(1,10):
        q.append(random.randint(1,100))
        
    print 'init list=',q
    result = quick_sort(q)
    print 'sorted list=',result


合并排序

 

 

def merge_sort(s_list1,s_list2):
    result = []

    while s_list1 and s_list2:
        q = s_list1[0]
        p = s_list2[0]
            
        if q<p:
            result.append(q)
            s_list1 = s_list1[1:]
        else:
            result.append(p)
            s_list2 = s_list2[1:]
            
    if s_list1:
        result.extend(s_list1)
    
    if s_list2:
        result.extend(s_list2)
        
    return result


def merge_main_sort(s_list):
    length = len(s_list)
    if length <=1:
        return s_list
    
    s_list1 = s_list[0:length/2]
    s_list2 = s_list[length/2:]
    
    rs1 = merge_main_sort(s_list1)
    rs2 = merge_main_sort(s_list2)
    
    result = merge_sort(rs1,rs2)
    return result

    
if __name__ == "__main__":
    import random
    c = []
    for i in range(100):
        i_random = random.randint(1,1000)
        c.append(i_random)
        
    print 'before sort=="%s"'%c
    rs = merge_main_sort(c)
    print 'after sort=="%s"'%rs


插入排序

 

 

# -*- coding: utf-8 -*-


def insert_sort(sorted_list,insert_list):
    u"sorted_list 是从小到大排列好了的队列"
    for e in insert_list:
        length = len(sorted_list)
        i_index = length  #如果都比列表中的元素都大,则说明自己新插入的元素最大
        for i in range(length): #找寻插入的位置
            if e<=sorted_list[i]:
                i_index = i
                break
            
        sorted_list.insert(i_index,e)
    
    return sorted_list
            
if __name__ == "__main__":
    import random
    d = []
    for i in range(16):
        e = random.randint(1,100)
        d.append(e)
        
    print "init list-------",d
    
    sored_list = []
 
    for index,elem in enumerate(d):
        sored_list = insert_sort(sored_list,[elem])
        print "***",index+1,"->",sored_list,"->",elem
    
    print "result---------",sored_list

选择排序

def select_sort(data):
    u"""
    第一次从待排序的数据元素中选出最小(或最大)的一个元素,
    存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,
    然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
    选择排序是不稳定的排序方法。
    """
    for i in range(0, len (data)-1):
        min_index = i #最小索引
        for j in range(i + 1, len(data)):
            if data[j] < data[min_index]:
                min_index = j
        data[i], data[min_index] = data[min_index], data[i]  # swap
    
    return data


if __name__ == "__main__":
    import random
    
    data = []
    for i in range(10):
        data.append(random.randint(1,100))
    print("source data======",data)
    result = select_sort(data)
    print("sort result data====",result)

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值