반응형
-내 생각
단순한 정렬 문제로, Arrays.sort() 메서드를 사용하면 손쉽게 풀 수 있지만 개인적으로 정렬 알고리즘에 대한 공부도 할 겸 문제의 설명에 나와있는 삽입 정렬, 거품 정렬을 이용해 풀어보고자 했다.
-해법
import java.util.Scanner;
public class Main{
static void insertion_sort(int[] arr) { // 삽입 정렬 메소드
int key; // 정렬할 키 값
for(int i =1;i<arr.length;i++) { // 첫 번째는 정렬된 것으로 간주하므로 1번 시작
key = arr[i]; // key값 저장
for(int j=i-1;j>=0;j--) { // key값 이전의 인덱스들과 크기 비교
if(arr[j]>key) { // key값 보다 크다면,
arr[j+1] = arr[j]; // 뒤로 한 칸 이동.
arr[j] = key; // key 값을 앞선 인덱스 자리에 삽입.
}
}
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int arr[] = new int[n];
for(int i=0;i<arr.length;i++) { // 데이터 입력
arr[i] = in.nextInt();
}
insertion_sort(arr); // 삽입정렬 수행
for(int i=0;i<arr.length;i++) { // 출력
System.out.print(arr[i]+" ");
}
in.close();
}
}
삽입 정렬은 2번 인덱스 또는 맨 뒤의 인덱스를 기준으로 정렬을 실시하지만, 본인은 2번 인덱스를 기준으로 하였다. 2번 인덱스를 기준으로 앞선 인덱스들과 비교하며 자리를 바꾸어 정렬하는 방법으로 자세한 설명은 다른 블로그에 잘 되어 있으니 참고하면 좋겠다.
import java.util.Scanner;
public class Main{
static void bubble_sort(int[] arr) { // 버블 정렬 메소드
int temp; // 자리 바꾸기 위한 temp 변수
for(int i=0;i<arr.length;i++) { // 1회전에 끝자리는 정렬 됨을 주의
for(int j=0;j<arr.length-1-i;j++) { // 비교 대상의 끝 자리를 하나씩 줄여나간다
if(arr[j]>arr[j+1]) { // 대소비교 후 자리교환
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int arr[] = new int[n];
for(int i=0;i<arr.length;i++) { // 데이터 입력
arr[i] = in.nextInt();
}
bubble_sort(arr); // 버블 정렬 호출
for(int i=0;i<arr.length;i++) { // 출력
System.out.print(arr[i]+" ");
}
}
}
버블 정렬은 0번 인덱스부터 +1인덱스와 비교해 나아가며 자리를 바꾸는 정렬로 1회전 시 끝에는 가장 큰 수가 정렬되는 형태이다. 마찬가지로 자세한 설명은 다른 블로거분들의 글을 참고하면 좋을 것 같다.
반응형