문제 정의
주어진 배열의 요소들을 내림차순(또는 오름차순)으로 정렬하는 C 프로그램을 작성해야 합니다.
배열이란 무엇인가?
배열(Array)은 동일한 자료형의 관련 데이터 항목들이 하나의 공통된 이름 아래 모여 있는 자료 구조입니다. 배열 안의 특정 값은 인덱스 번호(index number)를 통해 식별할 수 있습니다.
배열 선언하기
C 언어에서 배열을 선언하는 기본 문법은 다음과 같습니다.
datatype array_name [size];
예시를 살펴보겠습니다.
float marks[50];
위 코드는 실수형(float) 요소 50개를 저장할 수 있는 'marks'라는 이름의 배열을 선언합니다.
int number[10];
위 코드는 정수형(int) 상수를 최대 10개까지 저장할 수 있는 'number'라는 배열을 선언합니다.
배열의 각 요소는 배열 인덱스(array index)로 구분되며, 인덱스를 사용하면 원하는 요소에 쉽게 접근할 수 있습니다. 참고로 C 언어의 배열 인덱스는 0부터 시작합니다.
내림차순 정렬 프로그램
다음은 배열을 내림차순으로 정렬하는 C 프로그램입니다. 이 프로그램은 선택 정렬(selection sort) 방식과 유사하게, 서로 다른 두 요소를 비교하여 큰 값이 앞쪽에 오도록 위치를 교환(swap)합니다.
#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 descending order is:\n");
for (i = 0; i < n; ++i){
printf("%d\n", num[i]);
}
}
프로그램 동작 원리
- 사용자로부터 배열에 저장할 요소의 개수(n)를 입력받습니다.
- 반복문을 통해 각 요소의 값을 차례대로 입력받아 배열에 저장합니다.
- 중첩 반복문을 사용하여 모든 요소 쌍을 비교하며, 앞의 값이 뒤의 값보다 작으면 임시 변수(a)를 이용해 두 값을 교환합니다.
- 정렬이 완료되면 배열의 처음부터 끝까지 순서대로 출력합니다.
만약 오름차순으로 정렬하고 싶다면 조건문의 비교 연산자만 변경하면 됩니다. 즉, if (num[i] < num[j])를 if (num[i] > num[j])로 바꾸면 작은 값부터 차례대로 정렬됩니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
enter number of elements in an array 4 Enter the elements 11 34 67 89 The numbers in descending order is: 89 67 34 11
입력된 네 개의 숫자(11, 34, 67, 89)가 가장 큰 수부터 작은 수 순서로 내림차순 정렬되어 출력된 것을 확인할 수 있습니다.