시간 복잡도가 O(N^²)인 정렬 알고리즘을 연습하기 위한 기초 문제이다.
거품 정렬에 대한 포스팅에 이 문제를 예제로 작성했기 때문에 설명을 생략한다.
삽입 정렬 및 선택 정렬은 추후 포스팅 예정.
정답 1.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 배열의 크기를 정하는 입력값
int[] arr = new int[N];
for (int i=0; i<N; i++) { // 배열에 해당 수들을 추가
arr[i] = Integer.parseInt(br.readLine());
}
for (int i=0; i<arr.length-1; i++) {
for (int j=0; j<arr.length-1-i; j++) { // 매 반복마다 반복 횟수가 줄어든다
if (arr[j]>arr[j+1]) { // 만약 우측의 값이 좌측보다 작다면 위치를 바꾼다
int temp = arr[j]; // swap이 없기 때문에 별도 임시 변수를 만들어줘야 한다.
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for (int num : arr) {
System.out.println(num);
}
}
}
출처: https://7357.tistory.com/137 [응애. 나 애기 개발자.:티스토리]
정답 2.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
for (int i=0; i<N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
for (int i=0; i<arr.length-1; i++) {
boolean isChanged = false; // 정렬 작업이 수행되고 있는지 체크
for (int j=0; j<arr.length-1-i; j++) {
if (arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
isChanged = true; // 정렬 작업이 수행되었다면 true
}
}
if (!isChanged) { break; } // 배열을 순회하며 단 한 번도 반복되지 않았다면 비교를 멈춘다
}
for (int num : arr) {
System.out.println(num);
}
}
}
출처: https://7357.tistory.com/137 [응애. 나 애기 개발자.:티스토리]
'CS ﹒ Algorithm > Baekjoon' 카테고리의 다른 글
JAVA 백준 문제풀이 (20) 7568: 덩치 (0) | 2022.07.16 |
---|---|
JAVA 백준 문제풀이 (19) 2751: 수 정렬하기2 (0) | 2022.07.15 |
JAVA 백준 문제풀이 (17) 2231:분해합 (0) | 2022.07.13 |
JAVA백준 문제풀이 (16) 17478:재귀함수가 뭔가요? (0) | 2022.07.12 |
JAVA 백준 문제풀이 (15) 2798: 블랙잭 (0) | 2022.07.11 |