버블정렬이란 서로 인접한 두 값을 비교하여 그 값에 따라 위치를 바꿔주며 정렬하는 알고리즘이다. 예를 들어 아래와 같은 배열이 있다고 가정하면
4 2 3 1 먼저 첫번째 index의 값인 4부터 시작하여 첫번째 원소와 두번째 원소를 비교한다. 4가 2보다 크니 위치를 바꿔주고 즉 2 4 3 1을 만들고 다시 두번째 원소와 세번째 원소를 비교한다. 4가 3보다 크므로 2 3 4 1이 된다. 마지막으로 세번째 원소와 네번째 원소를 비교한다. 첫번째 회전의 결과는 2 3 1 4 가 된다.두번째 회전 결과
2 3 1 4 세번째 회전 결과 2 1 3 4 네번째 회전 결과 1 2 3 4 다음과 같은 방법으로 정렬을 진행하는것이 버블정렬이다.#include <iostream>
using namespace std;
int main()
{
int a[101], n, i , j, tmp;
scanf("%d",&n);
for(i=0; i<n; i++){
scanf("%d",&a[i]);
}
for(i=0; i<n-1; i++){
// 마지막 원소는 어차피 최대값으로 고정되기 때문에 효율적인 정렬을 위해 j<n-i-1을 함
for(j=0; j<n-i-1; j++){
if(a[j]>a[j+1]){
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
for(i=0; i<n; i++){
printf("%d ",a[i]);
}
return 0;
}
데이터의 갯수가 n이라고 하면, 버블정렬은 모든 시나리오에서 똑같은 비교횟수를 가진다. 총 루프의 횟수는 n(n-1)/2 이므로 시간복잡도는 O(n^2) 이다.
장점
단점