数据结构——用python实现排序算法

来源:互联网 发布:淘宝联盟可以赚钱吗 编辑:程序博客网 时间:2024/05/29 10:26

用python实现各种数据结构,是不是EXCITING?本文实现了基础排序算法

代码较为简单,按顺序如下:

1.插入排序

#coding=utf8L=[223, 85, 232, 171, 215, 229, 12, 58, 219, 143, 61, 152, 32, 42, 199, 82, 252, 217, 106, 240, 202, 40, 180, 292, 235, 214, 116, 76, 298, 33, 132, 185, 44, 31, 73, 110, 201, 174, 127, 108, 251, 83, 172, 36, 93, 88, 233, 218, 30, 18, 262, 293, 263, 277, 100, 48, 246, 98, 75, 170, 138, 278, 134, 297, 78, 226, 206, 176, 28, 133, 203, 50, 222, 123, 230, 285, 105, 189, 238]'''Created on 2016年10月2日@author: sx'''def charu(L):    m=0    g=0    print(len(L))    for i in range(1,len(L)):        m=m+1        x=L[i]        j=i        while j>0 and L[j-1]>x:            m=m+1            L[j]=L[j-1]            j=j-1            g=g+1        L[j]=x    print(L)    print(m,g,m+g) #方法简单直接又暴力,不错不错   charu(L)

2、冒泡排序

#encoding=UTF-8'''Created on 2016年10月2日@author: sx'''L=[223, 85, 232, 171, 215, 229, 12, 58, 219, 143, 61, 152, 32, 42, 199, 82, 252, 217, 106, 240, 202, 40, 180, 292, 235, 214, 116, 76, 298, 33, 132, 185, 44, 31, 73, 110, 201, 174, 127, 108, 251, 83, 172, 36, 93, 88, 233, 218, 30, 18, 262, 293, 263, 277, 100, 48, 246, 98, 75, 170, 138, 278, 134, 297, 78, 226, 206, 176, 28, 133, 203, 50, 222, 123, 230, 285, 105, 189, 238]# def suiji(i):def maopao(L):    m=0    for i in range(0,len(L)):        m=m+1        for j in range(i+1,len(L)):            m=m+1            if L[i]>L[j]:                print(L[i],L[j])                swap(L,i,j)                print(L)                m=m+1    print(m)#     冒泡排序好像打擂台def swap(L,i,j):    q=L[j]    L[j]=L[i]    L[i]=qmaopao(L)

3、冒泡排序优化算法

#encoding=UTF-8'''Created on 2016年10月2日@author: sx'''import randomL=[223, 85, 232, 171, 215, 229, 12, 58, 219, 143, 61, 152, 32, 42, 199, 82, 252, 217, 106, 240, 202, 40, 180, 292, 235, 214, 116, 76, 298, 33, 132, 185, 44, 31, 73, 110, 201, 174, 127, 108, 251, 83, 172, 36, 93, 88, 233, 218, 30, 18, 262, 293, 263, 277, 100, 48, 246, 98, 75, 170, 138, 278, 134, 297, 78, 226, 206, 176, 28, 133, 203, 50, 222, 123, 230, 285, 105, 189, 238]# def suiji(i):#     s=[]#     for i in range(0,i):#         q=random.randint(10,300)#         if q not in s:#             s.append(q)#     print(s)def maopao(L):    m=0    g=0    for i in range(0,len(L)):        m=m+1        for j in range(-len(L)+1,-i):            m=m+1            k=-j#             if L[k]<L[i]:#                 print(L[i],L[k])#                 swap(L,i,k)#                 print(L)#                 m=m+1            o=k-1            if L[k]<L[o]:                print(L[j],L[o])                swap(L,j,o)                print(L)                g=g+1    print(m,g)#     冒泡排序好像打擂台def swap(L,i,j):    q=L[j]    L[j]=L[i]    L[i]=qmaopao(L)

4、冒泡排序再优化

#encoding=UTF-8'''Created on 2016年10月2日@author: sx'''import randomL=[223, 85, 232, 171, 215, 229, 12, 58, 219, 143, 61, 152, 32, 42, 199, 82, 252, 217, 106, 240, 202, 40, 180, 292, 235, 214, 116, 76, 298, 33, 132, 185, 44, 31, 73, 110, 201, 174, 127, 108, 251, 83, 172, 36, 93, 88, 233, 218, 30, 18, 262, 293, 263, 277, 100, 48, 246, 98, 75, 170, 138, 278, 134, 297, 78, 226, 206, 176, 28, 133, 203, 50, 222, 123, 230, 285, 105, 189, 238]# def suiji(i):#     s=[]#     for i in range(0,i):#         q=random.randint(10,300)#         if q not in s:#             s.append(q)#     print(s)def maopao(L):    m=0    f=1    g=0    for i in range(0,len(L)):        if f==1:             m=m+1            f=0            for j in range(-len(L)+1,-i):                m=m+1                k=-j                o=k-1                if L[k]<L[o]:                    print(L[i],L[o])                    swap(L,o,k)                    f=1                    print(L)                    g=g+1                elif L[k]==L[o]:                    f=1        else:            pass    print(m,g)#    考虑一种情况 局部调整结束def swap(L,i,j):    q=L[j]    L[j]=L[i]    L[i]=qmaopao(L)

5、希尔排序

'''Created on 2016年10月2日@author: sx'''L=[223, 85, 232, 171, 215, 229, 12, 58, 219, 143, 61, 152, 32, 42, 199, 82, 252, 217, 106, 240, 202, 40, 180, 292, 235, 214, 116, 76, 298, 33, 132, 185, 44, 31, 73, 110, 201, 174, 127, 108, 251, 83, 172, 36, 93, 88, 233, 218, 30, 18, 262, 293, 263, 277, 100, 48, 246, 98, 75, 170, 138, 278, 134, 297, 78, 226, 206, 176, 28, 133, 203, 50, 222, 123, 230, 285, 105, 189, 238]def ShellSort(L):    t=len(L)    m=0    g=0    while(t>1):        t=int(t/12+1)        i=0        m=m+1        while i<len(L):            m=m+1#                 print(i)            x=L[i]            j=i            while j>0 and L[j-t]>x:                m=m+1                g=g+1                L[j]=L[j-t]                j=j-t#             while L[i]<L[i+t]:#                 L[i]=L[i+t]#             print(L)            L[j]=x            i=i+t#             print(L)    print(m,g,m+g)ShellSort(L)

小慧慧还在睡觉~

6、选择排序

#encoding=UTF-8'''Created on 2016年10月2日@author: sx'''L=[223, 85, 232, 171, 215, 229, 12, 58, 219, 143, 61, 152, 32, 42, 199, 82, 252, 217, 106, 240, 202, 40, 180, 292, 235, 214, 116, 76, 298, 33, 132, 185, 44, 31, 73, 110, 201, 174, 127, 108, 251, 83, 172, 36, 93, 88, 233, 218, 30, 18, 262, 293, 263, 277, 100, 48, 246, 98, 75, 170, 138, 278, 134, 297, 78, 226, 206, 176, 28, 133, 203, 50, 222, 123, 230, 285, 105, 189, 238]# def suiji(i):L=[2,3,12,34,52,1,45]def xuanze(L):    print(len(L))    m=0    g=0    for i in range(0,len(L)):        min=i        m=m+1        for j in range(i+1,len(L)):            m=m+1            if L[min]>L[j]:                min=j                m=m+1        if min!=i:            swap(L,i,min)            print(L)            g=g+1    print(m,g)#     选择排序和冒泡排序的不同:选择排序只需交换一次,冒泡排序需要比较且交换多次,选择排序比较的较多def swap(L,i,j):    q=L[j]    L[j]=L[i]    L[i]=q    xuanze(L)
0 0
原创粉丝点击