버블정렬

비주얼C++/예제모음 2012. 11. 24. 17:51


버블정렬

 

  예를들어 7 3 5 2 1 8 9 4 6 0 이라는 숫자가 있다고 합시다. 이것을 버블정렬로 순서대로 정렬하는 법을 말씀드리겠습니다.
  먼저 첫번째수 7과 다음수 3을 비교합니다. 두 수중에 작은수(오름차순정렬일때)가 3이니깐 앞에 작은수가 와야하므로 두수를 바꿉니다. 그럼,
 
  3 7 5 2 1 ...

  이렇게 되겠지요.

 

  그다음에 첫번째수를 비교했으므로 한칸 뒤로 가서 두번째수를 비교합니다. 7과 5지요. 5가 작으므로 또 바꿉니다. 그럼,

 

  3 5 7 2 1 ...

  이렇게 되지요.

 

  그다음에는 세번째수 7과 다음 2를 비교합니다. 그럼 2가 작으니깐 또 바꿉니다. 그럼,

  3 5 2 7 1 ...

 

  여기까지 이해되시죠? 맨처음부터 두번째 , 두번째수와 세번째수, 세번째수와 네번째수 ... 이렇게 끝까지 비교하면 맨 뒤에 뭐가 남을까요?

  제일큰 숫자가 맨뒤에 남게 됩니다. 여기서는 9가 되겠지요?

 

  그래서 처음실행 결과는

  3 5 2 1 7 8 4 6 0 9

  이렇게 9가 맨뒤로 가게 됩니다.

 

    그다음에 다시 처음부터 비교합니다. 아까와 같은 방법으로요. 근데 이번에는 맨뒤에 제일큰수 9가 가 있으므로 그 앞까지만 비교해도 되겠지요? 그래서 0까지만 비교하게 됩니다. 그럼 다음큰수인 8이 9앞으로 오게 됩니다.

 

  3 2 1 5 7 4 6 0 8 9

  이런식으로요...


  이렇게 자꾸 하다보면 큰숫자가 계속 뒤로 가게되지요. 그러면 끝에는 정렬이 되게 되는 것입니다.

  이게 버블정렬 방법이에요. 별로 어렵지 않지요?

  그럼 소스를 보시죠.

 

#include <iostream.h>

void main()
{
 int num[10];

 cout << "숫자 10개를 띄워서 입력하세요.\n";
 cin >> num[0] >> num[1] >> num[2] >> num[3] >> num[4] >> num[5] >> num[6] >> num[7] >> num[8] >> num[9];
   
 for (int j=9;j>0;j--) {
  for (int i=0;i<j;i++)
  if (num[i]>num[i+1]) {
   int temp;
   temp = num[i];
   num[i]=num[i+1];
   num[i+1]=temp;
  };
 };
 cout << "버블정렬후 : " << num[0] << " " << num[1] << " " << num[2] << " " << num[3] << " " << num[4] << " " << num[5] << " " << num[6] << " " << num[7] << " " << num[8] << " " << num[9] << "\n";
}

 

먼제 int num[10]에서 10개의 숫자를 담는 배열을 선언하구요.
cin에서 10개의 숫자를 띄워쓰기로 입력받습니다.

그다음부분이 정렬메인인데요.

 

 for (int j=9;j>0;j--) {  // 최대 9번에서 0까지 비교
  for (int i=0;i<j;i++)  // 처음부터 j까지 비교
  if (num[i]>num[i+1]) {  // 만약에 뒤의수가 앞의수보다 작으면은
   int temp;            // 바꿔줍니다.
   temp = num[i];
   num[i]=num[i+1];
   num[i+1]=temp;
  };
 };

 

  주석을 보시면 이해가시죠? 바꾸어 주는 부분이 좀 해깔릴수 있는데 여기서 그냥 num[i] = num[i+1] 이렇게 해주면 되지 않느냐고 하실지 모르겠지만
이렇게 해주면 두개가 같아집니다. 예를들어 7과 3이 있는데 num[i]=num[i+1]해주면 num[i]도 3 num[i+1]도 3이 되지요. 7이 없어져버립니다. 그래서
임시변수 temp를 줘서 임시변수에 앞의 수를 저장해놓고 두수를 같게 만든다음 뒤수에 임시변수값을 넣어주는 것입니다.

 

  이해되시지요? 궁금하신 사항은 댓글로 부탁드립니다.

'비주얼C++ > 예제모음' 카테고리의 다른 글

[C++] 완전수 찾기소스  (0) 2014.07.24
삽입정렬  (0) 2012.11.24
선택정렬  (0) 2012.11.24


설정

트랙백

댓글