a = [[231,'cow',234334,2231319,323242],[3,'alien',2,2312,3212],[9,'box',234,2319,3242]]
def merge_sort(a):
# copy the original array so it's unaffected
b = a[:]
# if there are 2 or fewer elements, just compare and return in the right order
if len(b) < 2:
return b
elif len(b) == 2:
x,y = b
if x[1] <= y[1]:
return b
else:
return [y,x]
# if there are more than 2, break it to 2 sub-arrays and recursively sort both
else:
m = int(len(b)/2)
p1 = merge_sort(b[:m])
p2 = merge_sort(b[m:])
rs = []
# then combine them by repeatedly popping the smaller one
while len(p1) > 0 or len(p2) > 0:
if len(p1) == 0:
rs.append(p2.pop(0))
elif len(p2) == 0:
rs.append(p1.pop(0))
elif p1[0][1] <= p2[0][1]:
rs.append(p1.pop(0))
else:
rs.append(p2.pop(0))
return rs
print merge_sort(a)
def bubblesort( A ):
for i in range( len( A ) ):
for k in range( len( A ) - 1, i, -1 ):
if ( A[k][1] < A[k - 1][1] ):
swap( A, k, k - 1 )
def swap( A, x, y ):
tmp = A[x]
A[x] = A[y]
A[y] = tmp
A=[[231,'cow',234334,2231319,323242],[3,'alien',2,2312,3212],[9,'box',234,2319,3242]]
print A
bubblesort(A)
print A
Mergesort易于实现。这是一个divide-and-conquer算法,它将问题分解成更小的部分(对左半部分、右半部分进行排序,然后将它们组合起来)。在
如果不想使用内置函数,只需创建自己的键控排序函数,然后像上面那样调用它。在
这里有一个简单的气泡排序法,它是最容易理解的分类法之一(因为这看起来像是家庭作业)。我想,关键是老师要让你思考二维方面,这意味着你需要在比较中查看第二列的第二个元素。我修改了这个比较。我刚测试过它,你需要在字符串的元素周围加上引号。在
相关问题 更多 >
编程相关推荐