熟悉排序算法

快速排序

# -*- 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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章