#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
vector<int> num(n, 0);
for(int i = 0; i < num.size(); i++)
scanf("%d", &num[i]);
int temp = 0;
for(int i = 0; i < n-1; i++)
{
for(int j = 0; j < n-i-1; j++)
{
if(num[j] > num[j+1])
{
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
for(int i = 0; i < n; i++)
printf("%d ", num[i]);
return 0;
}
1. 버블정렬이란? : 맨 왼쪽 수부터 이웃한 숫자와 비교하면서 큰 숫자를 맨 오른쪽으로 보내는 정렬방식이다. 마치 수면아래에서 버블이 수면 위로 떠 올라가는 형상처럼 보여서 버블정렬이라고 한다. 정렬을 할 때마다 비교횟수가 줄어든다. 다음 예시로 알아보자.
1) i = 0;
j = 0 ~ 4
j = 0 ↓
13 | 23 | 11 | 7 | 5 | 15 |
if ( num[j] > num[j+1] ) = if ( 13 > 23 ) == false
j++
j = 1 ↓
13 | 23 | 11 | 7 | 5 | 15 |
if (num[j] > num[j+1] ) = if ( 23 > 11 ) == true
true가 되면 스왑을 진행한다.
temp = num[1] = 23;
num[1] = num[2] / 23을 11로 변경;
num[2] = temp / 11을 23으로 변경;
j = 2 ↓
13 | 11 | 23 | 7 | 5 | 15 |
if (num[j] > num[j+1] ) = if ( 23 > 7 ) == true
true가 되면 스왑을 진행한다.
temp = num[2] = 23;
num[2] = num[3] / 23을 7로 변경;
num[2] = temp / 7을 23으로 변경;
이후 반복 ( num[n-i-1] = num[6-0-1] = num[5] 전 까지 실행한다. 15 이후로는 수가 없기 때문)
j = 0 ↓
13 | 11 | 7 | 5 | 15 | 23 |
위 과정을 num[n-i-1] = num[6-1-1] = num[4] 전 까지 반복한다. 가장 큰 숫자 23이 맨 오른쪽으로 갔으므로 23까지 비교할 필요가 없기 때문
이후 반복하면 결과는 아래와 같이 된다.
5 | 7 | 11 | 13 | 15 | 23 |