이번에는 정렬의 기본인 거품정렬(Bubble Sort) 문제를 풀어보았습니다!! 

 

기본이라지만 저에겐 역시나 어려웠습니다ㅠㅜ

 

프로그램 명: bubble
제한시간: 1 초

다음 애플릿은 버블 소트가 이루어지는 과정이다.

//// [동작보기 클릭] //////

데이터 수 , 스텝 수가 주어질 때 위와 같이 동작하도록 한 후 주어진 스텝 후의 배열의 상태를 출력하는 것이다.

예를 들어 7 개의 데이터가 주어지고 , 2 스텝 후의 상태는

             6 2 9 8 3 4 7
1 번째 스텝: 2 6 8 3 4 7 9
2 번째 스텝: 2 6 3 4 7 8 9

2 6 3 4 7 8 9 를 출력하면 된다.

입력

입력의

  • 첫 줄은 데이터의 개수 n, 스텝 수 s 가 주어진다. ( 1 <= s < n )
  • 다음 줄에는 n 개의 데이터가 입력으로 주어진다. 각 수는 -1000 에서 1000 사이 정수이다.

n 은 1000 이하의 양의 정수이다.

출력

s 스텝 후의 상태를 한 줄에 출력한다.

입출력 예

입력

7 2
6 2 9 8 3 4 7

출력

2 6 3 4 7 8 9

즉 min[i]로 1과 2, 2와 3, 이렇게 두개씩 묶어 비교하는 코드를 짜면 됩니다.

완성된 코드는 다음과 같습니다.

 

#include <stdio.h>
 int main(){
 

        int n, s, i;

        int sort[1000];
        int temp, count = 0;
 
        scanf("%d %d", &n, &s);
 
        for (i = 0; i < n; i++){
                 scanf("%d", &sort[i]);
        }
 
        while (count < s){
                 for (i = 0; i < n - 1; i++){
                         min = sort[i];
                         if (min > sort[i + 1]){
                                  temp = sort[i];
                                  sort[i] = sort[i + 1];
                                  sort[i + 1] = temp;
                                  }
                         }
                 count++;
                 }

         for (i = 0; i < n; i++){

                 printf("%d ", sort[i]);
        }
        
        return 0;
}

결과는??

 

 

 

 

 

통과~~

 

처음엔 밑과 같이 이중for문으로 풀려했으나, 그러면 안쪽 for문이 한바퀴 돈 뒤에 sort[0]부터 시작할 수가 없어 위의 코드와 같이

 

while-for문을 사용하여 문제를 풀었습니다.

        for (j = 0 ; j < s ; j++) {

                 for (i = j; i < n - 1; i++){

                         min = sort[i];
                         if (min > sort[i + 1]){
                                  temp = sort[i];
                                  sort[i] = sort[i + 1];
                                  sort[i + 1] = temp;
                                  }
                         }
                 }

 

 

 

 

기본적인 버블정렬도 2시간만에 코드를 짰습니다ㅠㅠ 앞으로도 갈길이 멀군요. 더욱 노력해야겠습니다

 

+ Recent posts