快速排序,归并排序,堆排序python实现
2016-08-28 19:17
706 查看
http://blog.csdn.net/u011608357/article/details/37724329
快速排序的时间复杂度最好情况下为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实现:
[python]
view plain
copy
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实现:
[python]
view plain
copy
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来弹出堆中的最小元素。
[python]
view plain
copy
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数据结构:
[python]
view plain
copy
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;
快速排序的时间复杂度最好情况下为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实现:
[python]
view plain
copy
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实现:
[python]
view plain
copy
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来弹出堆中的最小元素。
[python]
view plain
copy
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数据结构:
[python]
view plain
copy
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;
相关文章推荐
- 快速排序、堆排序、归并排序的python实现
- 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
- 排序算法的C++实现与性能分析(插入排序、归并排序、快速排序、STOOGE排序、堆排序)
- java实现七种排序 (插入排序, 希尔排序, 插入排序, 快速排序, 简单选择排序, 堆排序, 归并排序)
- Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)
- java实现:快速排序,基数排序,计数排序,归并排序,堆排序,希尔排序
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- python排序算法-冒泡排序,选择排序,直接插入排序,希尔排序,归并排序,快速排序,堆排序
- 各类排序算法实现(堆排序、希尔排序、快速排序、归并排序等)
- C++实现几种常用的时间复杂度为O(nlogn)的排序方法:归并排序、快速排序、堆排序、希尔排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 常用排序算法C++实现(堆排序,快速排序,归并排序,基数排序)
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- Java实现快速排序、归并排序、堆排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- Python 快速排序 堆排序——Python实现一些算法持续更新
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- 快速排序、堆排序和归并排序的实现
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序