Cho mảng arr[] n phần tử. Kiểm tra mảng có tăng dần không. In "Đã sắp xếp" hoặc "Chưa sắp xếp".
Ví dụ
Đầu vào - {12, 13, 14, 16, 18} → Đã sắp xếp
Đầu vào - {2, 1, 3, 5, 6} → Chưa sắp xếp
Cách 1: Đệ quy
- Cơ sở: n ≤ 1 → true
- Nếu arr[n-1] < arr[n-2] → false
- Gọi đệ quy với n-1
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);
}
Cách 2: Lặp (Iterative)
- Vòng lặp i từ 0 đến n-2
- Nếu arr[i] > arr[i+1] → false
- Kết thúc vòng lặp → true
int arraySortedCheck(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
if (arr[i] > arr[i+1]) return 0;
}
return 1;
}
Chương trình hoàn chỉnh
#include <stdio.h>
// Đệ quy
int checkRecursive(int arr[], int n) {
if (n <= 1) return 1;
if (arr[n-1] < arr[n-2]) return 0;
return checkRecursive(arr, n-1);
}
// Lặp
int checkIterative(int arr[], int n) {
for (int i = 0; i < n-1; i++)
if (arr[i] > arr[i+1]) return 0;
return 1;
}
int main() {
int arr[] = {1, 8, 3, 4, 7};
int n = sizeof(arr)/sizeof(arr[0]);
printf("Đệ quy: %s\n", checkRecursive(arr, n) ? "Đã sắp xếp" : "Chưa sắp xếp");
printf("Lặp: %s\n", checkIterative(arr, n) ? "Đã sắp xếp" : "Chưa sắp xếp");
return 0;
}
Kết quả
Đệ quy: Chưa sắp xếp Lặp: Chưa sắp xếp