这里列出了插入排序,归并排序,以及归并-插入混合排序的算法并测试了三种排序在最坏情况下的运算速度比较。结果表明归并-插入混合排序是优于前两者的。但是混合排序在选择切换临界值时,并不是简单比较在前两种算法在不同序列长度下的快慢,因为归并排序在临界值附近过分割,反而会降低效率。不过我也没找到更好的方法
# -*- coding: utf-8 -*-
def mergesort(l, p, r):
if p < r:
q = (p+r)/2
mergesort(l, p, q)
mergesort(l, q+1, r)
merge(l, p, q, r)
def merge(l, p, q, r):
l1 = l[p:q+1]
l2 = l[q+1:r+1]
for x in range(p, r+1):
if (len(l1) is not 0) & (len(l2) is not 0):
if l1[0] < l2[0]:
l[x] = l1[0]
l1.pop(0)
else:
l[x] = l2[0]
l2.pop(0)
elif len(l1) is 0:
l[x] = l2[0]
l2.pop(0)
else:
l[x] = l1[0]
l1.pop(0)
def insertsort(l):
n = len(l)
for i in range(1, n):
key = l.pop(i)
j = i-1
while (j >= 0) & (key < l[j]):
j -= 1
l.insert(j+1,