首页 > 代码库 > 快速排序,归并排序,堆排序python实现
快速排序,归并排序,堆排序python实现
快速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序
归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是稳定的排序
堆排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是不稳定的排序
1.快速排序
快速排序的介绍以及C语言实现在这里:快速排序C语言实现
本文介绍的是快速排序python实现:
def recurse(lista,left,right): if left<right: i=left; j=right; tmp=lista[left]; while(i<j): while(i<j and lista[j]>=tmp): j=j-1; if i<j: lista[i]=lista[j]; i=i+1; while (i<j and lista[i]<tmp): i=i+1; if i<j: lista[j]=lista[i]; j=j-1; lista[i]=tmp; recurse(lista,left,i-1); #分治 recurse(lista,i+1,right); return lista; def quicksort(lista): leng=len(lista); recurse(lista,0,leng-1); lista=[1,4,23,45,97,22,10,4]; #快速排序测试代码 quicksort(lista); print lista;2.归并排序
归并排序及C语言实现在这里:归并排序C语言实现
本文介绍的是归并排序python实现:
def merge(lista,left,mid,right): # 合并有序数组 i=left; j=mid+1; tmp=[]; while(i<=mid and j<=right): if lista[i]<= lista[j]: tmp.append(lista[i]); i=i+1; else: tmp.append(lista[j]); j=j+1; while(i<=mid): tmp.append(lista[i]); i=i+1; while(j<=right): tmp.append(lista[j]); j=j+1; i=0; while(i<right-left+1): lista[left+i]=tmp[i]; i=i+1; def mergerecurse(lista,left,right): if left<right: mid=int((right+left)/2); mergerecurse(lista,left,mid); mergerecurse(lista,mid+1,right); merge(lista,left,mid,right); return lista; def mergesort(lista): leng=len(lista); mergerecurse(lista,0,leng-1); lista=[1,4,23,45,97,22,10,4]; #测试代码 mergesort(lista); print lista;3.堆排序
堆排序及C语言实现在这里:堆排序C语言实现
本文介绍的是堆排序python实现:
python中提供了堆这种数据结构,可以直接使用heap中的heappush方法来建立堆,使用heappop来弹出堆中的最小元素。
from heapq import *; def heapsort(lista): h=[]; for i in range(0,len(lista)): heappush(h,lista[i]); for i in range(0,len(h)): lista[i]=heappop(h);
也可以自行实现heap数据结构:
def heapadjust(lista,s,end): i=2*s+1; tmp=lista[s]; while(i<=end): if i+1<=end and lista[i+1]>lista[i]: i=i+1; if lista[i]<=tmp: break; lista[s]=lista[i]; s=i; i=s*2+1; lista[s]=tmp; def heapsort2(lista): n=len(lista); for i in range((n-1)/2,-1,-1): heapadjust(lista,i,n-1); for i in range(n-1,-1,-1): lista[i],lista[0]=lista[0],lista[i]; heapadjust(lista,0,i-1); lista=[5,4,2,5,1,7]; # 堆排序测试代码 heapsort(lista); print lista;
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。