题目:分别实现冒泡排序,插入排序,快速排序的算法,并使用列表测试
#冒泡排序实现
def bubbleSort(data):
if len(data) < 2: return data
for i in range(0, len(data)-1):
m = i
for j in range(i+1, len(data)):
if data[m] > data[j]: m =j
if m != i:
#不使用中间元素,下面语句直接完成两个数组元素交换
data[i], data[m] = data[m], data[i]
return data
#插入排序实现
def insertSort(data):
if len(data) < 2: return data
for i in range(1,len(data)):
key = data[i]
j = i-1
while j >= 0 and key < data[j]:
data[j+1] = data[j]
j = j-1
data[j+1]= key
return data
#快速排序实现
def partition(data, p, r):
i = p-1
cmp = data[r]
for j in range(p,r):
if data[j] < cmp:
i = i+1
if i <> j: data[i],data[j] = data[j],data[i]
if (i+1) <> r: data[i+1],data[r] = data[r],data[i+1]
return i+1
def randomPartition(data, p, r):
import random
i = random.randint(p,r)
data[i], data[r] = data[r], data[i]
return partition(data, p, r)
def quickSort(data, p, r):
if p < r:
#q = partition(data, p, r)
q = randomPartition(data, p, r)
quickSort(data, p, q-1)
quickSort(data, q+1, r)
#归并排序
from heapq import merge
def merge_sort(m):
if len(m) <= 1:
return m
middle = len(m) /2
left = m[:middle]
right = m[middle:]
left = merge_sort(left)
right = merge_sort(right)
return list(merge(left, right)
#创建一个100个元素的数组,每次用shuffle打乱之后再排序
from random import shuffle,sample
numbers = sample(range(10),9)
shuffle(numbers)
print numbers
print 'after sorted:'
insertSort(numbers)
print numbers
shuffle(numbers)
print numbers
print 'after sorted:'
bubbleSort(numbers)
print numbers
shuffle(numbers)
print numbers
print 'after sorted:'
quickSort(numbers,0,len(numbers)-1)
print numbers
shuffle(numbers)
print numbers
print 'after sorted:'
numbers = merge_sort(numbers)
print numbers
运行截图如下: