排序算法python实现

Posted 涨涨涨123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法python实现相关的知识,希望对你有一定的参考价值。

参考java版的算法书,使用python重写了一遍。初学,自己写的,代码比较粗糙,意思明白就好。 

1 import numpy as np
2 import random
3 ####验证排序算法是否正确
4 a=[x for x in range(35)]
5 random.shuffle(a)
6 print(a)
7 rank(a)  ###rank为主函数
8 print(a)

接下来是不同算法实现

  1 def exch(a,i,j):
  2         t=a[j]
  3         a[j]=a[i]
  4         a[i]=t
  5 ####冒泡
  6 def rank(a):
  7     for i in range(len(a)-1):
  8         for j in range(i+1,len(a)):
  9             if a[i]>a[j]:
 10                 exch(a,i,j)
 11     return a
 12 #####选择排序
 13 def rank(a):
 14     for i in range(len(a)-1):
 15         flag=i
 16         for j in range(i+1,len(a)):
 17             if a[flag]>a[j]:
 18                 flag=j
 19         if flag!=i:
 20            exch(a,i,flag)
 21     return a
 22 ###########插入排序
 23 def rank(a):
 24     for i in range(1,len(a)):
 25         j=i
 26         while j>0 and a[j]<a[j-1]:
 27             exch(a,j,j-1)
 28             j-=1
 29     return a
 30 
 31 #######归并排序
 32 def rank(a):
 33     rankhelper(a,0,len(a)-1)
 34 def rankhelper(a,lo,hi):
 35     if hi<=lo:
 36         return
 37     mid=int((hi-lo)/2+lo)
 38     rankhelper(a,lo,mid)
 39     rankhelper(a, mid + 1,hi)
 40     merg(a,lo,mid,hi)
 41 def merg(a,lo,mid,hi):
 42 
 43     i=lo
 44     j=mid+1
 45     result=np.ones(len(a),dtype=int)  ####建空数组会降低排序效率,待改进
 46     result[lo:hi+1]=a[lo:hi+1]
 47 
 48     for k in range(lo,hi+1):
 49         if i>mid:
 50             a[k]=result[j]
 51             j+=1
 52         elif j>hi:
 53             a[k]=result[i]
 54             i+=1
 55         elif result[i]<result[j]:
 56             a[k]=result[i]
 57             i+=1
 58         else:
 59             a[k]=result[j]
 60             j+=1
 61 
 62 ####快排
 63 def rank(a):
 64     random.shuffle(a)
 65     rankhelper(a,0,len(a)-1)
 66 def rankhelper(a,lo,hi):
 67     if lo>=hi:
 68         return
 69     j=partition(a,lo,hi)
 70     rankhelper(a,lo,j-1)
 71     rankhelper(a,j+1,hi)
 72 def partition(a,lo,hi):
 73     l1=lo+1
 74     l2=hi
 75     while True:
 76         while a[l1]<a[lo]:
 77             if l1==hi:
 78                 break
 79             l1+=1
 80         while a[l2]>a[lo]:
 81             if l2==lo:
 82                 break
 83             l2-=1
 84         if l1>=l2:
 85             break
 86         exch(a,l1,l2)
 87     exch(a,lo,l2)
 88     return l2
 89 
 90 #############堆排序

 95 def sink(a,k,l):   #####最小堆
 96     while 2*k+1<=l:
 97         j=2*k+1
 98         if j<l and a[j]>a[j+1]:
 99             j=j+1
100         if a[j]>a[k]:
101             break
102         exch(a,j,k)
103         k=j
104 def sink1(a,k,l):  ###最大堆
105     while 2*k+1<=l:
106         j=2*k+1
107         if j<l and a[j]<a[j+1]:
108             j+=1
109         if a[j]<a[k]:
110             break
111         exch(a,j,k)
112         k=j
113 def rank(a):
114     l=len(a)-1
115     t=int(l/2)+1
116     while t>=0:
117         sink(a,t,l)
118         t-=1
119     while l>0:
120         exch(a,l,0)
121         l-=1
122         sink(a,0,l)

 

以上是关于排序算法python实现的主要内容,如果未能解决你的问题,请参考以下文章

快速排序-递归实现

算法基础——经典八大排序算法的Java及Python实现

python实现十大经典排序算法

(附代码)动图图解 | 十大经典排序算法Python版实现

Python排序算法动态图形化演示(实现代码)

十大排序算法总结(Python3实现)