티스토리 뷰



출처: http://en.wikipedia.org/wiki/Bubble_sort



방금 예제를 풀고 얕은 지식으로 쓴거니 확실히 알고싶은분은 출처에 가서 읽어보세요!


 


정수 5개로 예를 들면


First Pass:

( 5 1 4 2 8 ) \to ( 1 5 4 2 8 ),  첫 번째 원소와 두 번째 원소를 비교한다. 그리고 두번째 원소가 값이 더 작다면 첫 번째 원소와 두 번째 원소를 스왑.

( 1 5 4 2 8 ) \to ( 1 4 5 2 8 ),  위와 같이 5가 4보다 크기 때문에 5와 4를 스왑 -> 4 - 5

( 1 4 5 2 8 ) \to ( 1 4 2 5 8 ), 마찬가지

( 1 4 2 5 8 ) \to ( 1 4 2 5 8 ), 이번엔 5가 8보다 크지 않기 때문에 스왑하지 않는다.


첫 번째 예제와 같이 두 번째, 세 번째 예도 같음.

Second Pass:

( 1 4 2 5 8 ) \to ( 1 4 2 5 8 )

( 1 4 2 5 8 ) \to ( 1 2 4 5 8 ), Swap since 4 > 2

( 1 2 4 5 8 ) \to ( 1 2 4 5 8 )

( 1 2 4 5 8 ) \to ( 1 2 4 5 8 )


Third Pass:

( 1 2 4 5 8 ) \to ( 1 2 4 5 8 )

( 1 2 4 5 8 ) \to ( 1 2 4 5 8 )

( 1 2 4 5 8 ) \to ( 1 2 4 5 8 )

( 1 2 4 5 8 ) \to ( 1 2 4 5 8 )


 

#include <stdio.h>


int main() {

 

int num[100] = {0, }, i, j, k, N, temp;

scanf("%d", &N);


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

 

    scanf("%d", &num[i]); 

}


for (i = 0; i < N - 1; i++) {


for (j = 0; j < N - 1; j++) {

    

    if (num[j] > num[j + 1]){

    

temp = num[j + 1];

     num[j + 1] = num[j];

num[j] = temp;

    }

else{

}

}

for(k = 0; k < N; k++){

printf("%d ", num[k]);

}

puts("");

   }

}



댓글
댓글쓰기 폼