您的位置:首页 > 编程语言 > Python开发

Python2实现的几种排序算法

2016-09-05 14:33 429 查看
以下排序算法基于Python2.7

冒泡排序:

每次比较相邻的两个元素,比较大小并进行交换,直到排序完成。

def bubblesort(list):
for j in xrange(len(list)-1,-1,-1):
#推荐使用xrange替代range
for i in xrange(j):
if list[i]>list[i+1]: list[i],list[i+1] = list[i+1],list[i]
return list


或者使用while:

def bubbleSort(list):
listLength = len(list)
while listLength > 0:
for i in range(listLength - 1):
if list[i] > list[i+1]:
list[i], list[i+1] = list[i+1], list[i] listLength -= 1
return list


快速排序:

先从数列中取出一个数作为基准数,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复上面的步骤,直到各区间只有一个数。

def quickSort(list, low, high):
i = low
j = high
if i >= j:
return list
key = list[i]
while i < j:
while i < j and list[j] >= key:
j = j-1
list[i] = list[j]
while i < j and list[i] <= key:
i = i+1
list[j] = list[i]
list[i] = key
quickSort(list, low, i-1)
quickSort(list, j+1, high)
return list


快速排序还有种简单的写法,三行搞定:

def quickSort(list):
if len(list)<=1:
return list
return quickSort([lt for lt in list[1:] if lt<list[0]]) + list[0:1] + quickSort([ge for ge in list[1:] if ge>=list[0]])


插入排序:

每次遍历从min_index处的值开始,依次再跟后面的值比较,当发现j处比min_index值小时,将min_index赋值为j,继续跟后面的进行比较,直到找到最小的那个j,将j与min_index交换。

def insertSort(list):
for i in xrange(len(list)):
min_index = i
for j in xrange(i+1,len(list)):
if list[min_index] > list[j]:
min_index = j list[i],list[min_index] = list[min_index], list[i]
return list


堆排序:

堆实际上是一棵完全二叉树, 堆排序其实也是一种选择排序,是一种树形选择排序。

def siftDown(list,start,end):
root=start
while True:
child = 2*root+1
if child > end:
break
if child+1<=end and list[child]<list[child+1]:
child+=1
if list[root]<list[child]:
list[root],list[child]=list[child],list[root]
root=child
else:
break
def heapSort(list):
for start in xrange((len(list)-2)/2,-1,-1):
siftDown(list,start,len(list)-1)
for end in xrange(len(list)-1,0,-1):
list[0],list[end]=list[end],list[0]
siftDown(list,0,end-1)
return list


Python中内置了一个生成堆的模块heapq可以直接调用:

import heapq
def heapSort(list):
heapq.heapify(list)
heap = []
while list:
heap.append(heapq.heappop(list))
return heap


打完收功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python