티스토리 뷰
반응형
소개
인접한 두 수를 비교하면서 대소 비교에 적합한 수를 뒤로 보내는 알고리즘이다. 평균적으로 시간 복잡도는 $O(n^2)$를 나타낸다.
설명
- 현재 인덱스의 바로 다음번 인덱스와의 크기를 비교해서 조건에 맞다면 위치를 옮겨준다. 여기서 조건은 대소 비교의 조건이다.
- 비교하면서 한 번 순회를 끝내면 순회 시 제일 마지막 인덱스는 자연스럽게 제일 크거나 작은 값이다.
- 다음번 순회에서는 최종 인덱스 까지 순회할 필요 없다. 즉 순회마다 -1만큼 순회할 크기가 줄어 드는 것이다.
시간 복잡도 계산
전체 원소의 수가 $n$ 개라면 $(n-1) + (n-2) + ... + 2 + 1 = (n - 1) * n / 2 = (n^2-n)/2$의 값을 연산을 하게 될 것이다. 그래서 평균적인 시간 복잡도는 $O(n^2)$ 이 되는 것이다.
소스코드 - JAVA
public class BubbleSort { public static void main(String[] args) { int[] beforeSortingValues = ; // 버블정렬은 순회 할 때마다 순회 하는 크기가 줄어 든다. // 그래서 데이터 전체 길이로 시작해서 하나 씩 줄어 드는 가장 바깥쪽 for루프. for(int i=beforeSortingValues.length-1; i>=0; i--) { //원소들 끼리 비교하는 for루프 for(int j=0; j<i; j++) { int afterJIndex = j + 1; int value1 = beforeSortingValues[j]; int value2 = beforeSortingValues[afterJIndex]; //대소 비교 부등호 방향에 따라 정렬이 바뀐다. if(value1 > value2) { int temp = value1; beforeSortingValues[j] = value2; beforeSortingValues[afterJIndex] = temp; } } } for(int value : beforeSortingValues) { System.out.println(value); } } }
참고 블로그
반응형
'Algorithm' 카테고리의 다른 글
Selection Sort - 선택 정렬 (0) | 2018.09.29 |
---|---|
Greedy algorithm - 탐욕 알고리즘 (0) | 2018.09.29 |
Hash & HashTable Algorithm 설명 및 구현 (1) | 2018.09.21 |
댓글