728x90
728x90
버블 정렬(Bubble Sort)
버블 정렬(Bubble Sort)
- 배열에서 가장 큰 값을 찾아서 마지막에 배치시키고, 다음으로 큰 값을 찾아서 끝에서 두 번째에 배치시키고, 다음으로 큰 값을 찾아서 끝에서 세 번째에 배치시키면서 정렬해 나가는 방식
- 거품 모양과 같아서 버블 정렬(Bubble Sort)이라고 한다.
구현
$O(n^{2})$ 으로 구현하기
#include <iostream>
using namespace std;
#define N 5
int main() {
int a[N] = { 7, 6, 9, 5, 8 };
int tmp;
for (int i = 0; i < N; i++) { // i : Pass
for (int j = 0; j < N - i; j++) {
if (a[j] > a[j + 1]) {
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for (int i = 0; i < N; i++) {
cout << a[i] << " ";
}
return 0;
}
더보기
5 6 7 8 9
$O(n)$ 으로 구현하기
- 버블 정렬을 진행하다 보면, 특정 회차에서 정렬이 완료되었음에도 불구하고 마지막 회차까지 비교 연산을 진행하는 경우가 있다.
- 이를 개선하기 위해 중간 회차에서 데이터의 Swap 과정이 진행되지 않으면, 정렬이 완료된 것을 의미하므로, 연산을 종료하도록 하는 코드를 넣어주면 된다.
#include <iostream>
using namespace std;
#define N 5
int main() {
int a[N] = { 7, 6, 9, 5, 8 };
int tmp;
bool isSwaped;
for (int i = 0; i < N; i++) { // i : Pass
isSwaped = false;
for (int j = 0; j < N - i; j++) {
if (a[j] > a[j + 1]) {
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
isSwaped = true;
}
}
// Swap이 한번도 수행되지 않았다면 정렬이 수행된 것이므로 연산을 종료한다.
if (!isSwaped) {
break;
}
}
for (int i = 0; i < N; i++) {
cout << a[i] << " ";
}
return 0;
}
더보기
5 6 7 8 9
728x90
728x90
'Computer Science > 알고리즘' 카테고리의 다른 글
[Algorithm] 에라토스테네스의 체(Sieve of Erathosthenes) (0) | 2022.10.25 |
---|---|
[Algorithm] 소인수 분해(Prime/Integer Factorization) (0) | 2022.10.25 |
[Algorithm] 피보나치 수열(Fibonacci Sequence) (1) | 2022.10.06 |
[Algorithm] 삽입 정렬(Insertion Sort) (1) | 2022.10.06 |
[Algorithm] 선택 정렬(Selection Sort) (0) | 2022.10.06 |
[Algorithm] 최대(Max), 최소(Min), 최빈(Mode) (0) | 2022.10.06 |
[Algorithm] 콜라츠 추측(Collatz Conjecture) ; 우박수(Hailstone Sequence), 3N + 1 Problem (0) | 2022.09.01 |
[Algorithm] 소수(Prime Number) ; 쌍둥이 소수(Twin Primes), 메르센 소수(Mersenne Primes), 골드바흐의 추측(Goldbach's Conjecture) (0) | 2022.09.01 |