如何在python中为冒泡排序算法添加反向特性

2024-06-16 12:36:11 发布

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

我目前正在尝试为冒泡排序算法添加一个反向特性。你知道吗

这是我目前的状态:

_bubble_sort(self, reverse=False):
    lst = list(self.unsorted_tuple)

    swapped = True
    while swapped:
        swapped = False
        for i in range(len(lst) - 1):
            if lst[i] > lst[i + 1]:
                lst[i], lst[i + 1] = lst[i + 1], lst[i]
                swapped = True

    return lst

我不知道如何实现反向特性reverse=False。有人知道如何实现这个功能吗?你知道吗

事先谢谢你的帮助。你知道吗


Tags: self算法falsetrue状态特性sortlist
1条回答
网友
1楼 · 发布于 2024-06-16 12:36:11

问题是这条线:

if lst[i] > lst[i + 1]:

无论反向值是多少,运算符总是大于>;),而在某些情况下(取决于反向),您需要较低的<;)。
实现这一点的最简单方法是将运算符替换为执行比较的函数,该函数还考虑了反向。下面是一个使用lambda的示例。你知道吗

代码00.py:

#!/usr/bin/env python3

import sys
#import operator


def bubble_sort(unsorted, reverse=False):
    compare_func = (lambda x, y: x < y) if reverse else (lambda x, y: x > y)  # Create a separate function depending the value of reverse, so it's not checked every time the function is called
    #compare_func = operator.lt if reverse else operator.gt  # Use operator instead of lambdas
    lst = unsorted[:]  # Create a copy of the list
    swapped = True
    while swapped:
        swapped = False
        for i in range(len(lst) - 1):
            if compare_func(lst[i], lst[i + 1]):
                lst[i], lst[i + 1] = lst[i + 1], lst[i]
                swapped = True
    return lst


def main():
    l = [2, 6, 9, 1, 4, 7]
    reverse = False
    print("Reverse: {0:}\n  List: {1:}".format(reverse, bubble_sort(l, reverse=reverse)))
    reverse = True
    print("Reverse: {0:}\n  List: {1:}".format(reverse, bubble_sort(l, reverse=reverse)))


if __name__ == "__main__":
    print("Python {0:s} {1:d}bit on {2:s}\n".format(" ".join(item.strip() for item in sys.version.split("\n")), 64 if sys.maxsize > 0x100000000 else 32, sys.platform))
    main()
    print("\nDone.")

注意事项:

输出

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058256197]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" code00.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] 64bit on win32

Reverse: False
  List: [1, 2, 4, 6, 7, 9]
Reverse: True
  List: [9, 7, 6, 4, 2, 1]

Done.

相关问题 更多 >