1441과 같은 버블 정렬이지만, 불필요한 단계는 스킵할 수 있는 알고리즘이 추가적으로 요구된다.
예를 들어 1 5 3 2 4 를 오름차순으로 정렬한다면,
1단계 - 1 3 2 4 5
2단계 - 1 2 3 4 5 (이미 정렬 완료)
3단계 - 1 2 3 4 5
4단계 - 1 2 3 4 5
불필요한 3 4단계는 반복문을 깨고 나와서 실행을 하지 않아야 함.
## 3011
위와 같음
총 몇 단계가 필요한지 출력하는 코드
import java.util.Scanner;
public class CodeUp3011 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
sc.close();
int i;
int tmp;
for (i = 0; i < n - 1; i++) {
int cnt = 0;
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
cnt++;
}
}
if (cnt == 0)
break;
}
System.out.println(i);
}
}
- 정해진 포멧이 없어서 편하기도 했지만 이게 가장 적절한 코드인지는 모르겠다.
'PS - CodeUp' 카테고리의 다른 글
1501, 1502 - 2차원 배열 채우기1&2, 1507, 1512 - 4개의 직사각형 넓이, 숫자 등고선 (0) | 2022.01.20 |
---|---|
1411, 1492 - 빠진 카드, 1차원 누적 합 배열 만들기 (결국 둘 다 새로 짬) (0) | 2022.01.20 |
1096, 1097, 1098 - 바둑판에 흰 돌 놓기, 바둑알 십자 뒤집기, 설탕과자 뽑기 (0) | 2022.01.20 |
1093, 1094, 1095 - 이상한 출석 번호 부르기 1, 2, 3 (0) | 2022.01.20 |
1441, 1442, 1443 - 버블 정렬, 선택 정렬, 삽입 정렬 (0) | 2022.01.20 |