Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Kiểm tra mảng đã sắp xếp chưa (Đệ quy và Lặp) trong C

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