📅  最后修改于: 2023-12-03 14:56:21.599000             🧑  作者: Mango
这个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
。