Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript – 배열이 정렬되었는지 확인하는 방법(오름차순·내림차순 모두 지원)


JavaScript로 리터럴 값으로 구성된 배열을 입력받아, 해당 배열이 정렬되어 있는지 확인하는 함수를 작성해야 합니다. 이때 정렬 방향은 중요하지 않습니다. 즉, 오름차순이든 내림차순이든 정렬되어 있기만 하면 됩니다.

배열이 정렬되어 있으면 true를, 그렇지 않으면 false를 반환하도록 구현해 보겠습니다.

예제 코드

const arr = [1, 3, 56, 87, 99, 102, 144, 255, 456, 788, 999];

const isSorted = arr => {
    const { length: l } = arr;

    // 요소가 1개 이하면 항상 정렬된 상태로 간주
    if (l <= 1) {
        return true;
    }

    let ascending = true;   // 오름차순 여부
    let descending = true;  // 내림차순 여부

    for (let i = 1; i < l; i++) {
        // 현재 요소가 더 크면 내림차순은 성립하지 않음
        if (arr[i] > arr[i - 1]) {
            descending = false;
        }
        // 현재 요소가 더 작으면 오름차순은 성립하지 않음
        if (arr[i] < arr[i - 1]) {
            ascending = false;
        }
    }

    // 두 방향 중 하나라도 유지되면 정렬된 배열
    return ascending || descending;
};

console.log(isSorted(arr));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다 −

true

코드 동작 원리

이 함수는 세 단계로 동작합니다.

1. 예외 처리

배열의 길이가 1 이하이면 비교할 인접 요소가 없으므로, 항상 정렬된 상태로 간주하고 true를 반환합니다.

2. 두 가지 정렬 방향을 동시에 검사

ascending(오름차순)과 descending(내림차순) 두 개의 불리언 플래그를 준비한 뒤, 인접한 두 요소를 처음부터 끝까지 순회하며 비교합니다. 현재 요소가 이전 요소보다 크면 내림차순이 깨지고, 반대로 작으면 오름차순이 깨집니다.

3. 최종 판정

순회가 끝난 뒤 두 플래그 중 하나라도 true로 남아 있다면, 배열이 오름차순 또는 내림차순 중 한 방향으로 정렬되어 있다는 의미입니다. 따라서 ascending || descending의 결과를 반환합니다.

예를 들어 [9, 5, 2]와 같은 내림차순 배열, [1, 4, 7]과 같은 오름차순 배열은 모두 true를 반환하고, [3, 1, 5]처럼 어느 방향으로도 정렬되지 않은 배열은 false를 반환합니다. 이 방식은 배열을 한 번만 순회하므로 시간 복잡도가 O(n)으로 매우 효율적입니다.