Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Sorting and Searching(정렬, 이분검색과 결정알고리즘)_버블정렬) 본문
알고리즘/인프런 - Java알고리즘 입문
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Sorting and Searching(정렬, 이분검색과 결정알고리즘)_버블정렬)
slow-walker 2023. 10. 1. 12:07
2. 버블정렬
예시 입력 1
6
13 5 11 7 23 15
예시 출력 1
5 7 11 13 15 23
버블정렬
버블 정렬(Bubble Sort)은 간단하고 이해하기 쉬운 정렬 알고리즘 중 하나입니다. 이 알고리즘은 인접한 두 원소를 비교하면서 필요한 경우 위치를 교환하여 배열을 정렬합니다. 버블 정렬은 배열을 왼쪽에서 오른쪽으로 순회하면서 큰 값을 오른쪽 끝으로 "버블링" 시키는 방식으로 동작합니다.
버블 정렬의 작동 과정은 다음과 같습니다:
1. 배열의 첫 번째 원소부터 시작하여 현재 원소와 다음 원소를 비교합니다.
2. 만약 현재 원소가 다음 원소보다 크다면 두 원소의 위치를 교환합니다.
3. 배열의 끝까지 이동한 후, 가장 큰 원소가 마지막 위치로 이동됩니다.
4. 위의 과정을 다시 반복하면서 두 번째로 큰 원소를 두 번째 마지막 위치로 이동시킵니다.
5. 이러한 과정을 반복하여 배열 전체를 정렬합니다.
// 배열을 순회하면서 인접한 두 원소를 비교하고 필요한 경우 위치를 교환하여 배열을 정렬합니다.
// 이러한 과정을 배열 전체에 대해 반복하면서 정렬을 완료합니다.
public class BubbleSort {
public static void bubbleSort(int[] arr) {
int n = arr.length;
boolean swapped;
for (int i = 0; i < n - 1; i++) {
swapped = false;
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 두 원소의 위치 교환
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
// 만약 어떤 원소도 교환이 일어나지 않았다면 배열이 이미 정렬된 상태
if (!swapped) {
break;
}
}
}
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("원래 배열: " + Arrays.toString(arr));
bubbleSort(arr);
System.out.println("정렬된 배열: " + Arrays.toString(arr));
}
}
강의풀이
인전한 애들끼리 값을 비교해서 원소의 위치를 바꿔주는 것입니다.
이렇게해서 한번 다 돌고나면 오름차순일 경우 가장 큰 숫자가 맨 뒤로 갑니다.
만일 5다음에 그다음으로 큰 숫자인 21이 있다고 하면 맨 오른쪽으로 옮겨진 가장 큰 숫자 전까지만 비교합니다.
이렇게 비교 횟수가 하나 씩 줄어들어서 21이 4번 인덱스로 옮겨져야 합니다.
import java.util.Scanner;
public class Main {
public int[] solution(int n, int[] arr ) {
// n이 5면 {0,1,2,3}해서 4바퀴 돌아야함 : n-1
for (int i = 0; i < n-1; i++) {
// j는 반복문 도는 횟수가 하나씩 적어져야 합니다.
// -i 한 이유: j는 하나씩 적게,
// i가 1씩 커짐에 따라 j는 하나씩 감소한다
for (int j = 0; j < n-i-1; j++) {
// 양 옆을 비교, 이웃한 두수를 비교
// 앞 > 뒤, 뒤에가 작으면 스와프
if(arr[j] > arr[j+1]) {
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
return arr;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
for (int x : T.solution(n, arr)) {
System.out.print(x + " ");
}
}
}