이 글에서는 배열의 요소를 입력받은 뒤 교환(swap) 기법을 사용해 숫자들을 내림차순으로 정렬하고, 인덱스 위치를 활용하여 배열에서 두 번째로 큰 수와 두 번째로 작은 수를 출력하는 C 프로그램을 다룹니다.
배열이란?
배열(array)은 성격이 같은 여러 요소들을 하나의 이름 아래 묶어 저장할 수 있는 자료구조입니다. C 언어에서 배열에 대해 수행할 수 있는 기본 연산은 다음과 같습니다.
- 삽입(Insert)
- 삭제(Delete)
- 탐색(Search)
알고리즘
배열에서 두 번째로 큰 수와 두 번째로 작은 수를 찾는 알고리즘은 다음과 같습니다.
1단계 — 요소의 개수를 선언하고 입력받습니다.
2단계 — 실행 시점에 배열의 크기를 선언하고 읽어 들입니다.
3단계 — 배열의 요소들을 입력받습니다.
4단계 — 숫자들을 내림차순으로 정렬합니다.
5단계 — 인덱스를 이용해 두 번째로 큰 수와 두 번째로 작은 수를 찾습니다.
6단계 — 두 번째로 큰 수와 두 번째로 작은 수를 출력합니다.
C 프로그램 코드
다음은 배열에서 두 번째로 큰 수와 두 번째로 작은 수를 찾는 C 프로그램입니다.
#include<stdio.h>
void main(){
int i,j,a,n,counter,ave,number[30];
printf ("Enter the value of N\n");
scanf ("%d", &n);
printf ("Enter the numbers \n");
for (i=0; i<n; ++i)
scanf ("%d",&number[i]);
for (i=0; i<n; ++i){
for (j=i+1; j<n; ++j){
if (number[i] < number[j]){
a = number[i];
number[i] = number[j];
number[j] = a;
}
}
}
printf ("The numbers arranged in descending order are given below\n");
for (i=0; i<n; ++i)
printf ("%10d\n",number[i]);
printf ("The 2nd largest number is = %d\n", number[1]);
printf ("The 2nd smallest number is = %d\n", number[n-2]);
ave = (number[1] +number[n-2])/2;
counter = 0;
for (i=0; i<n; ++i){
if (ave==number[i])
++counter;
}
if (counter==0)
printf("The average of 2nd largest & 2nd smallest is not in the array\n");
else
printf("The average of 2nd largest & 2nd smallest in array is %d in numbers\n", counter);
}코드 동작 원리
위 프로그램은 중첩 반복문을 사용해 인접한 요소들을 서로 비교하며, 앞의 값이 뒤의 값보다 작으면 두 값을 교환하는 방식으로 내림차순 정렬을 수행합니다. 정렬이 완료되면 number[1](인덱스 1)이 두 번째로 큰 값이 되고, number[n-2](마지막에서 두 번째)가 두 번째로 작은 값이 됩니다. 마지막으로 이 두 값의 평균이 배열 안에 존재하는지 확인하여 결과를 추가로 출력합니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Enter the value of N 5 Enter the numbers 10 12 17 45 80 The numbers arranged in descending order are given below 80 45 17 12 10 The 2nd largest number is = 45 The 2nd smallest number is = 12 The average of 2nd largest & 2nd smallest is not in the array
위 예제에서 입력된 5개의 숫자(10, 12, 17, 45, 80)가 내림차순으로 정렬되었으며, 두 번째로 큰 수는 45, 두 번째로 작은 수는 12임을 확인할 수 있습니다. 또한 두 값의 평균인 28은 배열에 존재하지 않으므로 해당 메시지가 출력됩니다.