알고리즘

버블정렬 (C언어)

heounto 2026. 4. 2. 17:34
#include <stdio.h>
 void main(){
 	int i,j;
    int temp;
    int a[5] = {75,95,85,100,50};
    
    for(i=0; i<4; i++){
    	for(j=0; j<4-i; j++){
        	if(a[j] > a[j+1]){
            	temp=a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
             }
           }
        }
        
       	for(i=0; i<5; i++){
        	printf("%d", a[i]);
        }
  }

해당 코드는 2020년 1회 정보처리 기사 문제인데 

알고리즘 버블정렬을 통하여 각 배열의 크기를 비교하여 위치를 변경하여 낮은 숫자 -> 높은 숫자로 변경한다.

 

일단 담고 있는 배열 a 와 각각 배열을 비교하기 위한 변수 temp 가 필요하다.

여기서 temp는 값을 임시로 저장하여 기존 값이 덮어써지는 것을 방지하기 위한 변수이다.

for(i=0; i<4; i++){
    	for(j=0; j<4-i; j++){
        	if(a[j] > a[j+1]){
            	temp=a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
             }
           }
        }

일단 해당 코드가 버블정렬에 알고리즘인데 애초에 배열갯수가 5개이기때문에

어차피 앞뒤로 비교하기 때문에 해당 값의 앞의 값과 +1 된 뒤의 값이 필요하기에 n-1로 인해 i는 0,1,2,3 만 돌려주기로 한다.


현재 배열은 a[5] = {75, 95, 85, 100, 50}

 

i= 0 일때는 


j = 0 부터 시작하여 j < 4-i 이기 때문에 0,1,2,3 까지 돌려준다

 

j = 0 => 75 95 인데

if(a[j] > a[j+1])

해당 if 문 때문에 값 비교에서 75 > 95 가 불가능하니 넘겨준다.

 

j = 1 일때는 가능 => temp a[1]의 값인 95 복사해서 저장해두고

temp=a[j];

 

a[1] = a[2] 로 인해 a의 값이 95 => 85 교체  

a[j] = a[j+1];

 

그리고 해당 temp에 있는 값을 a[2]에 다시 넣어둔다. (temp는 이런 경우 이용되기 때문에 변수를 선언함)

 a[j+1] = temp;

 

그럼 현재 배열은 {75 85 95 100 50} => 85와 95가 자리 변경

 

이런식으로 반복하면 된다.

 

그러면 i = 0 을 다 돌렸을때 현 배열 {75 85 95 50 100}

 

i = 1 일경우 j는 0,1,2 를 돌리는데

j = 0 은 안됨
j = 1 은 안됨
j = 2 됨 temp 95 복사 후 a[2] = a[3], a[2]에 50 복사 후 a[3]에 95 기입

 

변경된 배열 {75 85 50 95 100}

 

... 이런식으로 변경하다보면

for(i=0; i<5; i++){
        	printf("%d", a[i]);
        }

 

현 배열은 a[5] = {50 75 85 95 100}
for 문으로 0~4 까지 돌리면 %d로 인해 뭐 띄워쓰기 그런거 필요없이 그냥 값만 다닥 붙여서 출력한다.
정답 : 50758595100

 

알게 된점 : 버블정렬은 인접한 두 값을 비교하며 큰 값을 뒤로 보내는 과정을 반복하여 정렬하는 알고리즘이다.