如何按绝对值对数组编号排序

依诺

给定一个整数数组:

(-20, -5, 10, 15)

该程序应输出:

[-5, 10, 15, -20]

我首先尝试考虑一下伪代码:

对于数组中的每个元素,如果其绝对值大于nxt元素,请交换它们

我将其实现为:

def sort_by_abs(numbers_array: tuple) -> list:

    numbers_array = list(numbers_array)

    for i, number in enumerate(numbers_array):
        if i == len(numbers_array) - 1:
            break
        elif abs(number) > abs(numbers_array[i+1]):
            temp = number
            numbers_array[i] = numbers_array[i+1]
            numbers_array[i+1] = temp


    return numbers_array

但是,当我们具有以下顺序时,它将失败:

(1, 2, 3, 0)

它输出

[1, 2, 0, 3]

而且我了解到,当最初不需要移动的元素不存在时,可能会有其他数字移动到左侧

然后,我首先尝试对列表进行排序,然后解决了这种情况:

def sort_by_abs(numbers_array: tuple) -> list:

    numbers_array = sorted(list(numbers_array))

    for i, number in enumerate(numbers_array):
        if i == len(numbers_array) - 1:
            break
        elif abs(number) > abs(numbers_array[i+1]):
            temp = number
            numbers_array[i] = numbers_array[i+1]
            numbers_array[i+1] = temp

    return numbers_array

但是,当我们有:(-1, -2, -3, 0)它输出[-2, -1, 0, -3]并且应该返回[0, -1, -2, -3]

如何改善?

Devesh库玛·辛格

只需使用按键排序的python内置abs函数即可考虑整数的绝对值进行排序

def sort_by_abs(numbers_array):

    return sorted(tuple(numbers_array), key=abs)

print(sort_by_abs((-5, 10, 15, -20)))
print(sort_by_abs((-1, -2, -3, 0)))
print(sort_by_abs((1, 2, 3, 0)))

输出将是

[-5, 10, 15, -20]
[0, -1, -2, -3]
[0, 1, 2, 3]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章