문제 개요
이 글에서는 C 언어를 사용하여 주어진 배열의 요소들을 오름차순(작은 값부터 큰 값 순서)으로 정렬하는 방법을 알아봅니다. 선택 정렬(Selection Sort)과 유사한 기본적인 비교·교환 방식을 활용하며, 초보자도 쉽게 이해할 수 있도록 단계별로 설명합니다.
배열(Array)이란?
배열은 동일한 자료형의 데이터 항목들이 하나의 공통된 이름 아래 연속적으로 저장된 자료 구조입니다. 배열에 저장된 특정 값은 고유한 인덱스 번호(index number)를 통해 식별하고 접근할 수 있습니다.
배열 선언 방법
C 언어에서 배열을 선언하는 기본 문법은 다음과 같습니다.
datatype array_name [size];
예시를 통해 살펴보겠습니다.
float marks [50];
위 코드는 실수형(float) 요소 50개를 저장할 수 있는 'marks'라는 이름의 배열을 선언합니다.
int number[10];
위 코드는 정수형(int) 요소를 최대 10개까지 저장할 수 있는 'number' 배열을 선언합니다.
배열의 각 요소는 배열 인덱스를 사용하여 손쉽게 접근할 수 있습니다. 예를 들어 첫 번째 요소는 num[0], 두 번째 요소는 num[1]과 같이 표현합니다.
오름차순 정렬 로직
배열을 오름차순으로 정렬하는 핵심 로직은 다음과 같습니다. 바깥쪽 반복문과 안쪽 반복문을 중첩하여 모든 요소를 서로 비교한 뒤, 앞의 값이 뒤의 값보다 크면 두 값을 교환(swap)하는 방식입니다.
for (i = 0; i < n; ++i){
for (j = i + 1; j < n; ++j){
if (num[i] > num[j]){
a = num[i];
num[i] = num[j];
num[j] = a;
}
}
}정렬 과정 설명
1. 변수 i가 가리키는 요소와 그 뒤에 있는 모든 요소(j)를 차례대로 비교합니다.
2. 앞의 값(num[i])이 뒤의 값(num[j])보다 크면 임시 변수 a를 이용해 두 값을 맞바꿉니다.
3. 이 과정을 배열 전체에 대해 반복하면 작은 값부터 차례대로 앞쪽에 배치되어 오름차순 정렬이 완성됩니다.
전체 C 프로그램 코드
다음은 사용자로부터 배열의 크기와 요소를 입력받아 오름차순으로 정렬한 후 결과를 출력하는 완전한 C 프로그램입니다.
#include <stdio.h>
void main (){
int num[20];
int i, j, a, n;
printf("enter number of elements in an array\n");
scanf("%d", &n);
printf("Enter the elements\n");
for (i = 0; i < n; ++i)
scanf("%d", &num[i]);
for (i = 0; i < n; ++i){
for (j = i + 1; j < n; ++j){
if (num[i] > num[j]){
a = num[i];
num[i] = num[j];
num[j] = a;
}
}
}
printf("The numbers in ascending order is:\n");
for (i = 0; i < n; ++i){
printf("%d\n", num[i]);
}
}코드 동작 순서
1. 최대 20개의 정수를 저장할 수 있는 배열 num을 선언합니다.
2. 사용자에게 배열에 넣을 요소의 개수(n)를 입력받습니다.
3. 반복문을 통해 n개의 정수를 배열에 저장합니다.
4. 중첩 반복문으로 모든 요소를 비교·교환하여 오름차순으로 정렬합니다.
5. 정렬된 결과를 순서대로 화면에 출력합니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 확인할 수 있습니다.
enter number of elements in an array 5 Enter the elements 12 23 89 11 22 The numbers in ascending order is: 11 12 22 23 89
입력된 5개의 숫자 12, 23, 89, 11, 22가 정렬되어 11, 12, 22, 23, 89 순서로 출력된 것을 볼 수 있습니다.
마무리 및 참고 사항
이 프로그램은 시간 복잡도가 O(n²)인 단순 비교 정렬 방식으로, 학습용으로 적합합니다. 만약 내림차순으로 정렬하고 싶다면 조건문의 비교 연산자만 >에서 <로 변경하면 됩니다. 또한 더 큰 데이터 세트를 다룰 때는 퀵 정렬(Quick Sort), 병합 정렬(Merge Sort) 등 효율적인 알고리즘을 활용하는 것이 좋습니다.