📌  相关文章
📜  C ++程序检查是否可以在旋转后对数组进行排序(1)

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

C++程序检查是否可以在旋转后对数组进行排序

在某些情况下,我们可能需要对通过旋转一个有序数组而得到的新数组进行排序。但是,在某些情况下,它可能不是一个有序数组。所以,我们需要编写一个程序来检查它是否可以在旋转后进行排序。

示例

假设我们有一个有序数组 [1, 2, 3, 4, 5],通过旋转,我们现在得到了新数组 [3, 4, 5, 1, 2]。根据题意,这个新数组是可以排序的。

再假设我们有一个有序数组 [4, 5, 6, 1, 2, 3],通过旋转,我们现在得到了新数组 [1, 2, 3, 4, 5, 6]。根据题意,这个新数组也是可以排序的。

但是,假设我们有一个有序数组 [1, 2, 3, 4, 5],通过旋转,我们现在得到了新数组 [4, 5, 1, 2, 3]。根据题意,这个新数组是不可以排序的。

实现

在C++中,我们可以首先定义一个函数来检查给定的数组是否可以进行排序。

bool isSortable(int arr[], int n) {
  int index = 0;
  for(int i = 1; i < n; i++) {
    if(arr[i] < arr[index]) {
      index = i;
    }
  }
  if(index == 0 || index == n - 1) {
    return true;
  }
  for(int i = 0; i < index; i++) {
    if(arr[i] > arr[i + 1]) {
      return false;
    }
  }
  for(int i = index; i < n - 1; i++) {
    if(arr[i] > arr[i + 1]) {
      return false;
    }
  }
  return true;
}

这个函数运行起来非常简单,只需要传入数组和数组的长度,然后返回一个布尔值。

该函数实现的思路如下:

  1. 找出数组中最小的元素,以及它的位置。
  2. 如果该位置是第一个或最后一个,那么该数组就是有序的,可以排序。
  3. 否则,将数组分成两半,分别检查这两个子数组是否都是升序的。
  4. 如果是,则可以排序;如果不是,则不能进行排序。
示例代码
#include <iostream>

bool isSortable(int arr[], int n);

int main() {
  int arr1[] = {3, 4, 5, 1, 2};
  int arr2[] = {4, 5, 6, 1, 2, 3};
  int arr3[] = {4, 5, 1, 2, 3};
  std::cout << "arr1 is " << (isSortable(arr1, 5) ? "sortable" : "not sortable") << std::endl;
  std::cout << "arr2 is " << (isSortable(arr2, 6) ? "sortable" : "not sortable") << std::endl;
  std::cout << "arr3 is " << (isSortable(arr3, 5) ? "sortable" : "not sortable") << std::endl;
  return 0;
}

bool isSortable(int arr[], int n) {
  int index = 0;
  for(int i = 1; i < n; i++) {
    if(arr[i] < arr[index]) {
      index = i;
    }
  }
  if(index == 0 || index == n - 1) {
    return true;
  }
  for(int i = 0; i < index; i++) {
    if(arr[i] > arr[i + 1]) {
      return false;
    }
  }
  for(int i = index; i < n - 1; i++) {
    if(arr[i] > arr[i + 1]) {
      return false;
    }
  }
  return true;
}
运行结果
arr1 is sortable
arr2 is sortable
arr3 is not sortable

以上就是C++程序检查是否可以在旋转后对数组进行排序的介绍,希望对您有所帮助!