0

我编写了一个 buuble 排序算法来按整数部分对元组列表进行排序。

但是如果给定的列表已经排序,我想返回 None 。我该怎么做?

def bubble_sort_2nd_value(tuples_list):

    NEWLIST = []
    for i in tuples_list:
        NEWLIST.append(i)
    for i in range(len(NEWLIST)):
         for j in range(i+1, len(NEWLIST)):
             if(NEWLIST[j][1]<NEWLIST[i][1]):
                 NEWLIST[j],NEWLIST[i] = NEWLIST[i],NEWLIST[j]


    print(NEWLIST)

tuples_list = [("h1",1),("h2",2),("h3", 3), ("hi" , 4)]

bubble_sort_2nd_value(tuples_list)
4

4 回答 4

0

您可以判断列表是否按以下方式排序:

#!/usr/bin/python3

def is_sorted(list_):
    result = True
    for element1, element2 in zip(list_, list_[1:]):
        if element1 <= element2:
            # this pair compares favorably
            pass
        else:
            result = False
            break

    return result

但是,如果这不是一个学术练习,您可能应该使用类似 sorted(list_, key=operator.itemgetter(1)) 的东西 - 因为它更容易,而且 Python 的内置排序非常好。

高温高压

于 2013-11-08T20:30:01.980 回答
0
tuples_list = [("h1",1),("h2",2),("h3", 3), ("hi" , 4)]
sorted(tuples_list, key=lambda x: x[1])
于 2013-11-08T20:12:45.963 回答
0

简单的答案是在排序之前检查列表是否已排序。我不会看到比这更简单的解决方案。

或者检查是否有任何项目像这样移动:

def bubble_sort_2nd_value(tuples_list):

    NEWLIST = []
    itemMoved=0
    for i in tuples_list:
        NEWLIST.append(i)
    for i in range(len(NEWLIST)):
         for j in range(i+1, len(NEWLIST)):
             if(NEWLIST[j][1]<NEWLIST[i][1]):
                 itemMoved=1
                 NEWLIST[j],NEWLIST[i] = NEWLIST[i],NEWLIST[j]

    if(itemMoved==0): print("None")
    else: print(NEWLIST)

tuples_list = [("h1",1),("h2",2),("h3", 3), ("hi" , 4)]

bubble_sort_2nd_value(tuples_list)
于 2013-11-08T20:09:21.623 回答
0

检查是否更改了数组并仅在更改后才返回:

def bubble_sort_2nd_value(tuples_list):
    edited = False
    newlist = []
    for i in tuples_list:
        newlist.append(i)
        for i in range(len(newlist)):
            for j in range(i+1, len(newlist)):
                if (newlist[j][1]<newlist[i][1]):
                    edited = True
                newlist[j], newlist[i] = newlist[i], newlist[j]
    if edited:
       return newlist
于 2013-11-08T20:10:47.947 回答