버블 정렬

[Java] 버블 정렬 알고리즘 작성
Dec 18, 2023
버블 정렬

버블 정렬(bubble sort)

목표 : 오름차순을 기준으로 정렬
 
원본 데이터 (5, 8, 2, 4, 3) N
알고리즘 작성 해보기
1회전(4바퀴)
(1) 5, 8 비교 (변화 없음)
(2) 8, 2 비교 (5, 2, 8, 4, 3)
(3) 8, 4 비교 (5, 2, 4, 8, 3)
(4) 8, 3 비교 (5, 2, 4, 3, 8)
1회전을 수행하면 정렬이 완료되지는 않았지만 가장 끝 수가 맨 뒤로 이동
 
2회전(3바퀴)
(1) 5, 2 비교 (2, 5, 4, 3, 8)
(2) 5, 4 비교 (2, 4, 5, 3, 8)
(3) 5, 3 비교 (2, 4, 3, 5, 8)
2회전을 수행하면 그 다음으로 큰 수가 맨 뒤로 이동, 바퀴 수는 한 바퀴 줄어든다
 
3회전(2바퀴)
(1) 2, 4 비교 (2, 4, 3, 5, 8)
(2) 4, 3 비교 (2, 3, 4, 5, 8)
 
4회전(1바퀴)
(1) 2, 3 비교 변화 없음
 
회전수 : N-1 n회전 비교 횟수 : N-n
 
바퀴수가 줄어드는 코드 작성
package ex03.test; public class BubbleTest01 { public static void main(String[] args) { int[] arr = {5,8,2,4,3}; final int N = arr.length; // 길이는 변하지 않기 때문에 final을 넣어서 구분해줌. //첫번째 4바퀴 돌기 for (int i = 0; i < N-1; i++) { for (int j = 0; j < N-i-1; j++) { System.out.println("몇바퀴 돌까?"); } System.out.println(); } // 두번째 4바퀴 도는데, 1회전때 4바퀴도는 내부 포문 만들기 } }
 
자리를 바꾸는 스왑코드 작성
package ex03.test; public class BubbleTest03 { public static void main(String[] args) { int[] arr = {4,3}; // 스왑코드 int temp; temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; System.out.println(arr[0]); System.out.println(arr[1]); } }
 
1회전 코드 작성해보기
if(arr[0] > arr[1]){ temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } if(arr[1] > arr[2]){ temp = arr[1]; arr[1] = arr[2]; arr[2] = temp; } if(arr[2] > arr[3]){ temp = arr[2]; arr[2] = arr[3]; arr[3] = temp; } if(arr[3] > arr[4]){ temp = arr[3]; arr[3] = arr[4]; arr[4] = temp; }
 
for문으로 다시 작성 해보기
package ex03.test; import java.util.Arrays; public class BubbleTest04 { public static void main(String[] args) { int[] arr = {5,8,2,4,3}; final int N = arr.length; int temp; for (int i = 0; i < N-1 ; i++) { if (arr[i] > arr[i+1]) { temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; System.out.println(Arrays.toString(arr)); } } } }
 
바퀴수가 줄어드는 코드와 합쳐보기
최종
package ex03.test; import java.util.Arrays; public class BubbleTest05 { public static void main(String[] args) { int[] arr = {5,8,2,4,3}; final int N = arr.length; int temp; for (int j = 0; j < N-1; j++) { for (int i = 0; i < N-j - 1; i++) { if (arr[i] > arr[i + 1]) { temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } System.out.println(Arrays.toString(arr)); } }
notion image
버블 정렬이 되어 나옴
 
정렬의 목적 Binary Search를 하여 빠른 검색이 가능 중복된 데이터 들을 찾을 때 동일한 데이터가 나오지 않는 순간 멈출 수 있다.
 
 
Share article
RSSPowered by inblog