熟悉排序算法

来源:互联网 发布:新网域名如何续费 编辑:程序博客网 时间:2024/06/04 19:45

快速排序

# -*- 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_resultif __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 resultdef 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



原创粉丝点击