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

📅  最后修改于: 2023-12-03 14:56:21.599000             🧑  作者: Mango

C++程序: 检查数组是否已排序和旋转

这个C++程序可以用来判断一个数组是否已经按照升序排序并且旋转。程序通过比较数组中相邻元素的大小来判断数组是否已经排序,并通过查找数组中最小的元素来确定数组是否被旋转。

#include <iostream>
#include <vector>

using namespace std;

bool isRotatedAndSorted(vector<int> &arr) {
    int size = arr.size();
    bool ascending = true;
    bool descending = true;
    int minIndex = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] < arr[(i + 1) % size]) {
            descending = false;
        } else if (arr[i] > arr[(i + 1) % size]) {
            ascending = false;
            minIndex = (i + 1) % size;
        }
    }
    if (ascending) {
        return true;
    } else if (descending) {
        return false;
    } else {
        for (int i = 0; i < size; i++) {
            int j = (i + minIndex) % size;
            if (arr[j] < arr[(j + 1) % size]) {
                return false;
            }
        }
        return true;
    }
}

int main() {
    vector<int> arr {5, 6, 7, 8, 1, 2, 3, 4};
    bool result = isRotatedAndSorted(arr);
    if (result) {
        cout << "The array is rotated and sorted." << endl;
    } else {
        cout << "The array is not rotated and sorted." << endl;
    }
    return 0;
}

这个程序首先遍历数组,比较相邻元素的大小来判断数组是否已经排序。如果数组是升序排序的,函数直接返回true。如果数组是降序排序的,函数返回false

如果数组没有排序,则遍历数组,找到最小元素的位置。然后遍历数组再次,相邻两个元素比较,如果前面的元素小于后面的元素,则数组不是已排序和旋转的。如果整个数组都按照此规则排列,则最后函数返回true