如何根据元素对二维数组进行字母顺序排序,而不使用内置的排序函数?(python)

2024-09-28 13:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这件事上已经有一段时间了,有人能帮我吗?在

假设我有一个数组:

[[231,cow,234334,2231319,323242],[3,alien,2,2312,3212],[9,box,234,2319,3242]]

有人能帮我创建一个排序函数,根据较大数组中每个单独数组的第二个元素按字母顺序对数组进行排序,这样它看起来像:

^{pr2}$

Tags: 函数box元素排序顺序字母数组cow
3条回答

Mergesort易于实现。这是一个divide-and-conquer算法,它将问题分解成更小的部分(对左半部分、右半部分进行排序,然后将它们组合起来)。在

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)
sort(array, key=lambda x: x[1])

如果不想使用内置函数,只需创建自己的键控排序函数,然后像上面那样调用它。在

这里有一个简单的气泡排序法,它是最容易理解的分类法之一(因为这看起来像是家庭作业)。我想,关键是老师要让你思考二维方面,这意味着你需要在比较中查看第二列的第二个元素。我修改了这个比较。我刚测试过它,你需要在字符串的元素周围加上引号。在

   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

相关问题 更多 >

    热门问题