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
广告