📜  C |数组|问题4(1)

📅  最后修改于: 2023-12-03 15:13:47.249000             🧑  作者: Mango

C语言中的数组问题 - 问题4

在C语言中,数组是一种非常常见的数据结构,但是在使用的时候也会遇到各种各样的问题。本文将介绍C语言中数组的问题4:如何判断一个数组是否是升序排列。

问题描述

给定一个整型数组,如何判断它是否是升序排列的。

解决方案
方案一:遍历数组

该方案的思路是遍历整个数组,逐一比较当前元素与前一个元素的大小。

int is_sorted(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        if (arr[i] < arr[i-1]) {
            return 0;
        }
    }
    return 1;
}

该方案的时间复杂度为 $O(n)$,空间复杂度为 $O(1)$,适用于数组长度较小的情况。

方案二:sort函数排序

该方案的思路是先使用sort函数对数组进行排序,然后再判断排序前后数组是否一致。

#include <stdlib.h>

int is_sorted(int arr[], int n) {
    int arr_copy[n];
    for (int i = 0; i < n; i++) {
        arr_copy[i] = arr[i];
    }
    qsort(arr_copy, n, sizeof(int), compare);
    for (int i = 0; i < n; i++) {
        if (arr_copy[i] != arr[i]) {
            return 0;
        }
    }
    return 1;
}

int compare(const void *a, const void *b) {
    return (*(int*)a - *(int*)b);
}

该方案的时间复杂度为 $O(nlogn)$,空间复杂度为 $O(n)$,适用于数组长度较大的情况。

总结

本文介绍了两种判断数组是否升序排列的方法,有遍历数组和排序后比较两种方法。需要根据具体情况选择合适的方法,以获得更好的性能。