在Python中的冒泡排序 - 升序和降序排序

2024-05-11 08:09:59 发布

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

所以我是python的新手,我有一个项目,需要我们遍历一个非常长的元组列表,我们必须按降序和升序对列表进行排序。然而,对于我的两个函数,我总是得到升序,有什么不对?有人来帮我,我真的压力很大

def bubblesort_descending(tuple_list):
    j = len(tuple_list)
    made_swap = True
    swaps = 0
    while made_swap:
        made_swap = False
        for cnt in range (j-1):
            if tuple_list[cnt] < tuple_list[cnt+1]:
                tuple_list[cnt], tuple_list[cnt+1] = tuple_list[cnt+1], tuple_list[cnt]
                made_swap = True
                swaps = swaps + 1
    return swaps

主程序:

^{pr2}$

Tags: 项目函数true列表排序list元组made
2条回答

你需要把迭代器转换成一个列表。在

unsorted = range(10)
unsorted_list = list(unsorted)

在这之后,代码将按降序排序,因为如果tuple_list[cnt]小于tuple_list[cnt+1],则进行交换。如果将逻辑运算符从“<”更改为“>”,则会得到升序,因为更改后,如果tuple_list[cnt]大于tuple_list[cnt+1],则会进行交换

将你的列表命名为tuple_list,这有点令人困惑。因为python中的列表和元组是不同的。
What's the difference between lists and tuples?

升序降序之间的基本区别在于比较:下面是一个来自http://www.codecodex.com/wiki/Bubble_sort#Python气泡排序实现:

def bubble_sort(lst, asc=True):
    lst = list(lst)  # copy collection to list
    for passesLeft in range(len(lst)-1, 0, -1):
        for i in range(passesLeft):
            if asc:
                if lst[i] > lst[i + 1]:
                    lst[i], lst[i + 1] = lst[i + 1], lst[i]
            else:
                if lst[i] < lst[i + 1]:
                    lst[i], lst[i + 1] = lst[i + 1], lst[i]
    return lst

注意:基于asc参数的差异?在

示例:

^{pr2}$

因此,实际上,将逻辑运算符<交换为>会颠倒排序顺序。在

相关问题 更多 >