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>
//Recursive function to check if it
//is in sorted order or not
int arraySortedCheck(int arr[], int n){
   //all elements are checked and
   //all are in sorted order
   if (n == 1 || n == 0)
      return 1;
   //when an array is not in sorted order
   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
");    }    else       printf("Array is not in sorted order
");    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){
      //when an array is not in sorted order
      if(arr[n-1] < arr[n-2])
         return 0;
   }
   //all elements are checked and
   //all are in sorted order
   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
");    }    else       printf("Array is not in sorted order
");    return 0; }

输出

如果运行上述代码,它将生成以下输出:

Array is in sorted order

更新于: 2020年8月13日

3K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告