7. (알고리즘) 버블 정렬(크기 오름차순 정렬 / Sort)

박은서's avatar
Dec 09, 2025
7. (알고리즘) 버블 정렬(크기 오름차순 정렬 / Sort)

1. {2, 3, 1} → {1, 2, 3}

package algo; public class ChangeData3Me1 { public static void main(String[] args) { // Sort 정렬 (오름차순 1,2,3) int[] arr = {2,3,1}; int temp; // 0번지, 1번지 비교 -> 참 -> 스왑 {2,3,1} if (arr[0] > arr[1]) { temp = arr[1]; arr[1] = arr[0]; arr[0] = temp; } // 1번지, 2번지 비교 -> 참 -> 스왑 {2,1,3} if (arr[1] > arr[2]) { temp = arr[2]; arr[2] = arr[1]; arr[1] = temp; } // 0번지, 1번지 비교 -> 참 -> 스왑 {1,2,3} if (arr[0] > arr[1]) { temp = arr[1]; arr[1] = arr[0]; arr[0] = temp; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } }
notion image
 

2. {7, 4, 2, 3, 1, 5, 6} → {1, 2, 3, 4, 5, 6, 7}

1) 노가다

package algo; public class ChangeData3Me2 { public static void main(String[] args) { int[] arr = {7,4,2,3,1,5,6}; int temp; // 0,1 비교 -> 참 -> 스왑 {4,7,2,3,1,5,6} 1회차-1 if (arr[0] > arr[1]){ temp = arr[1]; arr[1] = arr[0]; arr[0] = temp; } // 1,2 비교 -> 참 -> 스왑 {4,2,7,3,1,5,6} 1회차-2 if (arr[1] > arr[2]){ temp = arr[2]; arr[2] = arr[1]; arr[1] = temp; } // 2,3 비교 -> 참 -> 스왑 {4,2,3,7,1,5,6} 1회차-3 if (arr[2] > arr[3]){ temp = arr[3]; arr[3] = arr[2]; arr[2] = temp; } // 3,4 비교 -> 참 -> 스왑 {4,2,3,1,7,5,6} 1회차-4 if (arr[3] > arr[4]){ temp = arr[4]; arr[4] = arr[3]; arr[3] = temp; } // 4,5 비교 -> 참 -> 스왑 {4,2,3,1,5,7,6} 1회차-5 if (arr[4] > arr[5]){ temp = arr[5]; arr[5] = arr[4]; arr[4] = temp; } // 5,6 비교 -> 참 -> 스왑 {4,2,3,1,5,6,7} 1회차-6 if (arr[5] > arr[6]){ temp = arr[6]; arr[6] = arr[5]; arr[5] = temp; } // 0,1 비교 -> 참 -> 스왑 {2,4,3,1,5,6,7} 2회차-1 if (arr[0] > arr[1]){ temp = arr[1]; arr[1] = arr[0]; arr[0] = temp; } // 1,2 비교 -> 참 -> 스왑 {2,3,4,1,5,6,7} 2회차-2 if (arr[1] > arr[2]){ temp = arr[2]; arr[2] = arr[1]; arr[1] = temp; } // 2,3 비교 -> 참 -> 스왑 {2,3,1,4,5,6,7} 2회차-3 if (arr[2] > arr[3]){ temp = arr[3]; arr[3] = arr[2]; arr[2] = temp; } // 3,4 비교 -> 참 -> 스왑 {2,3,1,4,5,6,7} 2회차-4 if (arr[3] > arr[4]){ temp = arr[4]; arr[4] = arr[3]; arr[3] = temp; } // 4,5 비교 -> 참 -> 스왑 {2,3,1,4,5,6,7} 2회차-5 if (arr[4] > arr[5]){ temp = arr[5]; arr[5] = arr[4]; arr[4] = temp; } // 5,6 비교 -> 참 -> 스왑 {2,3,1,4,5,6,7} 2회차-6 if (arr[5] > arr[6]){ temp = arr[6]; arr[6] = arr[5]; arr[5] = temp; } // 0,1 비교 -> 참 -> 스왑 {2,3,1,4,5,6,7} 3회차-1 if (arr[0] > arr[1]){ temp = arr[1]; arr[1] = arr[0]; arr[0] = temp; } // 1,2 비교 -> 참 -> 스왑 {2,1,3,4,5,6,7} 3회차-2 if (arr[1] > arr[2]){ temp = arr[2]; arr[2] = arr[1]; arr[1] = temp; } // 2,3 비교 -> 참 -> 스왑 {2,1,3,4,5,6,7} 3회차-3 if (arr[2] > arr[3]){ temp = arr[3]; arr[3] = arr[2]; arr[2] = temp; } // 3,4 비교 -> 참 -> 스왑 {2,1,3,4,5,6,7} 3회차-4 if (arr[3] > arr[4]){ temp = arr[4]; arr[4] = arr[3]; arr[3] = temp; } // 4,5 비교 -> 참 -> 스왑 {2,1,3,4,5,6,7} 3회차-5 if (arr[4] > arr[5]){ temp = arr[5]; arr[5] = arr[4]; arr[4] = temp; } // 5,6 비교 -> 참 -> 스왑 {2,1,3,4,5,6,7} 3회차-6 if (arr[5] > arr[6]){ temp = arr[6]; arr[6] = arr[5]; arr[5] = temp; } // 0,1 비교 -> 참 -> 스왑 {1,2,3,4,5,6,7} 4회차-1 if (arr[0] > arr[1]){ temp = arr[1]; arr[1] = arr[0]; arr[0] = temp; } // 1,2 비교 -> 참 -> 스왑 {1,2,3,4,5,6,7} 4회차-2 if (arr[1] > arr[2]){ temp = arr[2]; arr[2] = arr[1]; arr[1] = temp; } // 2,3 비교 -> 참 -> 스왑 {1,2,3,4,5,6,7} 4회차-3 if (arr[2] > arr[3]){ temp = arr[3]; arr[3] = arr[2]; arr[2] = temp; } // 3,4 비교 -> 참 -> 스왑 {1,2,3,4,5,6,7} 4회차-4 if (arr[3] > arr[4]){ temp = arr[4]; arr[4] = arr[3]; arr[3] = temp; } // 4,5 비교 -> 참 -> 스왑 {1,2,3,4,5,6,7} 4회차-5 if (arr[4] > arr[5]){ temp = arr[5]; arr[5] = arr[4]; arr[4] = temp; } // 5,6 비교 -> 참 -> 스왑 {1,2,3,4,5,6,7} 4회차-6 if (arr[5] > arr[6]){ temp = arr[6]; arr[6] = arr[5]; arr[5] = temp; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } }

2) for문 정리

package algo; public class ChangeData3Me22 { public static void main(String[] args) { int[] arr = {7,4,2,3,1,5,6}; int temp; int row1 = arr.length-1; int row2; int x; int y; x = 0; //1회전 y = 1; for (int i = 0; i < row1; i++) { if (arr[x] > arr[y]){ temp = arr[y]; arr[y] = arr[x]; arr[x] = temp; } x++; y++; } x = 0; //2회전 y = 1; for (int i = 0; i < row1; i++) { if (arr[x] > arr[y]){ temp = arr[y]; arr[y] = arr[x]; arr[x] = temp; } x++; y++; } x = 0; //3회전 y = 1; for (int i = 0; i < row1; i++) { if (arr[x] > arr[y]){ temp = arr[y]; arr[y] = arr[x]; arr[x] = temp; } x++; y++; } x = 0; //4회전 y = 1; for (int i = 0; i < row1; i++) { if (arr[x] > arr[y]){ temp = arr[y]; arr[y] = arr[x]; arr[x] = temp; } x++; y++; } x = 0; //5회전 y = 1; for (int i = 0; i < row1; i++) { if (arr[x] > arr[y]){ temp = arr[y]; arr[y] = arr[x]; arr[x] = temp; } x++; y++; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } }

3) 최종 정리

package algo; public class ChangeData3Me23 { public static void main(String[] args) { int[] arr = {7,6,5,4,3,2,1}; int temp; int row1 = arr.length-1; int row2 = arr.length-1; int x; int y; for (int k = 0; k < row2; k++) { x = 0; y = 1; for (int i = 0; i < row1; i++) { if (arr[x] > arr[y]){ temp = arr[y]; arr[y] = arr[x]; arr[x] = temp; } x++; y++; } row1--; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } }
notion image

+) 참고

notion image
row2를 row1로 바꾸고, row1--; 지워도 결과 값은 제대로 나옴.
but 불필요한 스왑 더 해야 함
위 코딩대로 하면 스왑 횟수 36번로 예상됨
※ 숫자 7개일 경우 → 최대 회전수 6번(스왑 횟수는 회전차수마다 6→5→4→3→2→1로 줄어듦) → 최대 스왑 횟수 : 21번
 
Share article