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

C 언어로 이름·문자열 배열을 정렬하는 프로그램 작성 방법

이 문제에서는 문자열 배열이 주어지며, 입력으로 받은 모든 이름을 알파벳 오름차순으로 정렬하는 C 프로그램을 작성하는 것이 목표입니다.

예제를 통해 문제를 살펴보겠습니다.

입력

namesArray = ["Rishabh", "Jyoti", "Palak", "Akash"]

출력

["Akash", "Jyoti", "Palak", "Rishabh"]

문제 해결 접근 방법

C 표준 라이브러리의 qsort() 함수를 사용하면 손쉽게 해결할 수 있습니다. 정수 값을 정렬할 때와 기본 구조는 동일하지만, 이번에는 비교 대상이 정수가 아닌 문자열이라는 점이 다릅니다.

따라서 qsort()에 전달되는 비교 함수(comparator)를 수정해야 하며, 이때 strcmp() 함수를 사용해 두 문자열을 비교합니다. 이 방식을 활용하면 이름이나 문자열 배열을 간단하게 정렬할 수 있습니다.

핵심 포인트

  • comparator 함수: strcmp()의 반환값이 0 이상이면 1을 반환하여 두 문자열의 순서를 교환하도록 합니다.
  • qsort() 호출: 배열 이름, 요소 개수(n), 요소 하나의 크기(sizeof(const char*)), 그리고 비교 함수를 인자로 전달합니다.

이름 또는 문자열 배열을 정렬하는 C 프로그램

예제 코드

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int comparator(const void* str1, const void* str2) {
    if(strcmp(*(const char**)str1, *(const char**)str2) >= 0)
        return 1;
    else return 0;
}

int main() {
    const char* arr[] = {"Rishabh", "Jyoti", "Palak", "Akash"};
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("\nGiven array of names: \t");
    for (int i = 0; i < n; i++) printf("%s \t", arr[i]);
    qsort(arr, n, sizeof(const char*), comparator);
    printf("\nSorted array of names: \t");
    for (int i = 0; i < n; i++)
        printf("%s \t", arr[i]);
    return 0;
}

실행 결과

Given array of names:  Rishabh Jyoti Palak Akash
Sorted array of names: Akash   Jyoti Palak Rishabh

위 코드처럼 qsort()strcmp()를 조합하면 별도의 정렬 알고리즘을 직접 구현하지 않고도 문자열 배열을 효율적으로 정렬할 수 있습니다.