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