程序检查数组是否在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

以上是 程序检查数组是否在C中排序(迭代和递归) 的全部内容, 来源链接: utcz.com/z/343344.html

回到顶部