大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个算法。
1、插入排序:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
代码如下:
#L=[5,2,3,1,6,9] #definsert_sort(list): #leng=len(list);//求list长度 #foriinrange(1,leng): #temp=list[i];//设置哨兵 #j=i; #while(j>0andlist[j-1]>temp): #list[j]=list[j-1];//大的元素后移 #j=j-1; #list[j]=temp;//遇到比哨兵小的元素,将其设置为哨兵 #returnlist; #print(insert_sort(L))
2、冒泡排序:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到
结尾的最后一对。在这一点,最后的元素应该会是数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来
越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码如下:
#defbubble_sort(list): #leng=len(list); #foriinrange(0,leng)://控制趟数 #flag=True #forjinrange(1,leng-i): #iflist[j-1]>list[j]: #flag=False; #list[j-1],list[j]=list[j],list[j-1];//交换这两个数 #ifflag: #break #returnlist; #L=[9,5,6,8,4,2] #print(bubble_sort(L))
3、选择排序:它的工作原理是每一次从待排序的数据元素中选出最小(或)的一个元素,存放在序列的起始位置,直到全
部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
代码如下:
#defselect_sort(list): #leng=len(list) #foriinrange(0,leng): #min=i//设置哨兵,假设第一个元素是最小的 #forjinrange(i+1,leng): #iflist[j]<list[i]: #min=j//开始寻找比哨兵小的元素。如果小则将重新设置哨兵位置 #ifmin!=i: #list[i],list[min]=list[min],list[i]#交换这两个数 #returnlist #L=[-4,1,2,5,3,-2]
4、快速排序:它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的
所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
代码如下:
#defpartition(list,low,high)://划分算法 #key=list[low] #while(low<high): #while(low<highandlist[high]>=key):high=high-1 #iflow<high: #list[low]=list[high] #low=low+1 #while(low<highandlist[low]<=key):low=low+1 #iflow<high: #list[high]=list[low] #high=high-1 #list[low]=key #returnlow # #defquick_sort(list,low,high)://快速排序算法 #iflow<high: #pos=partition(list,low,high) #quick_sort(list,low,pos-1) #quick_sort(list,pos+1,high) #returnlist #L=[45,12,-32,65,28,9,-75,34] #print(quick_sort(L,0,len(L)-1))
5、堆排序:堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。
代码如下:
#堆排序 #defHeapAdjust(list,pos,len)://调整堆算法 #lchild=2*pos+1 #rchild=2*pos+2 #min=pos #ifpos<(len-1)/2: #iflchild<lenandlist[lchild]<list[min]: #min=lchild; #ifrchild<lenandlist[rchild]<list[min]: #min=rchild; #ifmin!=pos: #list[pos],list[min]=list[pos],list[min] #HeapAdjust(list,min,len) #returnlist # #defBuildHeap(list,len)://建堆算法 #i=len/2-1 #while(i>=0): #HeapAdjust(list,i,len) #i=i-1 #returnlist # #defHeap_sort(list,len)://堆排序算法 #BuildHeap(list,len) #while(len): #list[0],list[len-1]=list[len-1],list[0] #len=len-1 #HeapAdjust(list,len,0) #returnlist # #L=[45,12,-32,65,28,9,-75,34] #print(Heap_sort(L,len(L)))
好了,以上就是关于python常见的排序算法以及用法了,相信大家结合学习,一定更加深印象。如需了解更多python实用知识,点击进入PyThon学习网教学中心。