알고리즘/정렬 알고리즘
버블정렬 (Bubble Sort)
Leo724
2023. 4. 6. 21:45
Bubble Sort
Abstract
Selection Sort와 유사한 알고리즘으로 서로 인접한 두 원소의 대소를 비교하고, 조건에 맞지 않다면 자리를 교환하며 정렬하는 알고리즘
Process (오름차순)
- 1회전 : 첫 번째 원소와 두 번째 원소, 두 번째 원소와 세 번째 원소, .. (마지막-1) 번째 원소와 마지막 원소를 대소 비교하여 서로 교환한다.
- 1회전 수행시 가장 큰 원소가 맨 뒤로 이동하므로(정렬완료) 2회전 수행시 맨 마지막 원소를 제외하고, 2회전 수행시 뒤에서 두 번째 원소(정렬완료), 반복해서 첫 번째 원소와 두 번째 원소까지 정렬시킨다.
Java Code
public static void selectionSort(int[] arr) {
for (int i = 1; i < arr.length ; i++) {
/* 비교횟수는 배열의 크기에서 i번 횟수를 뺌*/
for(int j =0; j<arr.length-i;j++){
// 현재 원소가 다음 원소보다 큰 경우 swap
if(arr[j]>arr[j+1]){
int temp;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
시간복잡도
- 데이터의 개수가 n일 때,
- (n-1) + (n-2) + ... + 2 + 1 => n(n-1)/2
- O(n^2)시간만큼 소요
- 최선,평균,최악의 경우 모두 시간복잡도는 O(n^2)
장점
- 추가적인 메모리 소비가 작다.
- 안정정렬 가능하다.
단점
- 다른 정렬 알고리즘에 비해 교환 과정이 많아 비효율적이다.