程序检查数组是否在C中排序(迭代和递归)

给定一个具有n个元素的数组arr [],我们的任务是检查给定数组是否按排序顺序排列;如果按排序顺序,则打印“数组按排序顺序”;否则打印“数组按排序顺序”排序不正确”。

为了解决上述问题,我们可以使用迭代或递归方法,我们将同时讨论两者。

递归方法

那么,什么是递归方法?在递归方法中,我们一次又一次地递归调用一个函数,直到获得理想的结果。在递归方法中,函数返回的值存储在堆栈存储器中。

输入值 

arr[] = {12, 13, 14, 16, 18}

输出结果 

The array is in sorted order

说明-12 <13 <14 <16 <18,所以,是的,数组已排序

输入值 

arr[] = {2, 1, 3, 5, 6}

输出结果 

The array is not in sorted order

说明-2不小于1,因此不是按排序顺序。

以下使用的方法来解决问题-

  • 以数组arr []作为输入,并使用数组的大小初始化n。

  • 检查我们是否到达数组的开头,返回true。

  • 检查数组的前一个元素是否不小于下一个元素,返回false。

  • 递减n并转到步骤2。

算法

Start
In function int arraySortedCheck(int arr[], int n)
   Step 1→ If n == 1 || n == 0 then,
      Return 1
   Step 2→ If arr[n-1] < arr[n-2] then,
      Return 0
   Step 3→ Return arraySortedCheck(arr, n-1)
In Function int main(int argc, char const *argv[])
   Step 1→ Declare and initialize arr[] as {1,8,3,4,7}
   Step 2→ Declare and initialize int n as sizeof(arr)/sizeof(arr[0])
   Step 3→ If arraySortedCheck(arr, n) then,
      Print "Array is in sorted order”
   Step 4→ Else
      Print "Array is not in sorted order”
Stop

示例

//Recursive approach
#include <stdio.h>
//递归函数检查是否
//是否按排序顺序
int arraySortedCheck(int arr[], int n){
   //检查所有元素,然后
   //都按排序顺序
   if (n == 1 || n == 0)
      return 1;
   //当数组未排序时
   if(arr[n-1] < arr[n-2])
      return 0;
   return arraySortedCheck(arr, n-1);
}
int main(int argc, char const *argv[]){
   int arr[] = {1,8,3,4,7};
   int n = sizeof(arr)/sizeof(arr[0]);
   if(arraySortedCheck(arr, n)){
      printf("Array is in sorted order\n");
   }
   else
      printf("Array is not in sorted order\n");
   return 0;
}

输出结果

如果运行上面的代码,它将生成以下输出-

Array is in sorted order

迭代法

在迭代方法中,我们使用诸如for循环,while循环或do-while循环之类的循环来执行语句,直到条件成立为止,即1。

输入值 

arr[] = {12, 13, 14, 16, 18}

输出结果 

The array is in sorted order

说明-12 <13 <14 <16 <18,所以,是的,数组按排序顺序

输入值 

arr[] = {2, 1, 3, 5, 6}

输出结果 

The array is not in sorted order

解释2不小于1,因此不是按排序顺序。

解决问题的方法如下

  • 输入arr []。

  • 循环直到我们到达该数组的末尾。

    • 检查当前元素是否不小于下一个元素,返回false并退出。

    • 否则继续。

  • 转到步骤2。

算法

Start
In function int arraySortedCheck(int arr[], int n)
   Step 1 → Loop For i = 0 and i < n and ++i
      If arr[n-1] < arr[n-2] then,
         Return 0
   Step 2→ Return 1
In Function int main(int argc, char const *argv[])
   Step 1→ Declare and initialize arr[] as {1,8,3,4,7}
   Step 2→ Declare and initialize int n as sizeof(arr)/sizeof(arr[0])
   Step 3→ If arraySortedCheck(arr, n) then,
      Print "Array is in sorted order”
   Step 4→ Else
      Print "Array is not in sorted order”
Stop

示例

//Iterative approach
#include <stdio.h>
int arraySortedCheck(int arr[], int n){
   for (int i = 0; i < n; ++i){
      //当数组未排序时
      if(arr[n-1] < arr[n-2])
         return 0;
   }
   //检查所有元素,然后
   //都按排序顺序
   return 1;
}
int main(int argc, char const *argv[]){
   int arr[] = {1,8,3,4,7};
   int n = sizeof(arr)/sizeof(arr[0]);
   if(arraySortedCheck(arr, n)){
      printf("Array is in sorted order\n");
   }
   else
      printf("Array is not in sorted order\n");
   return 0;
}

输出结果

如果运行上面的代码,它将生成以下输出-

Array is in sorted order