📌  相关文章
📜  用于检查数组是否已排序和旋转的 Python3 程序(1)

📅  最后修改于: 2023-12-03 15:40:54.649000             🧑  作者: Mango

用于检查数组是否已排序和旋转的 Python3 程序

在进行算法问题时,经常需要检查一个数组是否已排序或者是排序并旋转。以下是使用Python3实现的两个函数,可以帮助您快速检查数组是否已排序或已排序并旋转。

Check Sorted

Check Sorted函数接受一个数组作为参数,如果数组已排序,则返回True。否则,返回False。

def check_sorted(arr):
    return all(arr[i] <= arr[i + 1] for i in range(len(arr) - 1))

使用示例:

>>> arr = [1, 2, 3, 4, 5]
>>> check_sorted(arr)
True

>>> arr = [5, 4, 3, 2, 1]
>>> check_sorted(arr)
False

上述代码中,我们使用了Python内置函数all()和列表推导式,来检查列表arr是否已按升序排列。

Check Rotated

Check Rotated函数接受一个数组作为参数,如果数组已排序并轮换,返回True。否则,返回False。

def check_rotated(arr):

    # find the index of the minimum element
    pivot = arr.index(min(arr))

    # check if the elements before pivot are in increasing order
    left = all(arr[i] <= arr[i + 1] for i in range(pivot))

    # check if the elements after pivot are in increasing order
    right = all(arr[i] <= arr[i + 1] for i in range(pivot, len(arr) - 1))

    # check if the last element is less than the first element
    last = arr[-1] <= arr[0]

    # return True if all conditions are met, else False
    return left and right and last

使用示例:

>>> arr = [4, 5, 1, 2, 3]
>>> check_rotated(arr)
True

>>> arr = [1, 2, 3, 4, 5]
>>> check_rotated(arr)
False

上述代码中,我们首先找到了数组中的最小元素,并记住它的索引,然后检查数组的左半部分是否按升序排列,数组的右半部分是否按升序排列,最后检查数组的最后一个元素是否小于数组的第一个元素。

这两个函数都非常简单、直接,且易于阅读和理解。它们可以用来研究具有排序结构的数组中的算法问题。