배열 요소를 역순으로 정렬하는 알고리즘을 살펴보자.
배열 역순 정렬 과정
위 그림은 n=7 일 때 역순으로 정렬하는 과정을 그린 그림이다.
교환 횟수는 n / 2 이며 n이 홀수일 때 가운데 요소는 교환하지 않기 때문에 나머지는 버려준다.
위의 예시에선 n = 7이므로 7 / 2 = 3이므로 3번의 교환이 이루어졌다.
교환 방법
위 그림에서 파란색의 자릿수를 i라고 하면 i와 n-i-1과의 교환이 계속해서 이루어지게 된다.
여기서 배열 안 값을 교환하는 방법으로 변수 t를 활용할 수 있다.
따라서 값의 교환은 다음과 같이 이루어진다.
메서드 swap 구현하기
배열 안의 두 요소를 교환하는 것은 자주 쓰이므로 독립적인 메서드로 구현하는 것이 좋다.
//배열 요소 a[idx1]과 a[idx2]의 값 교환하기 static void swap(int[] a, int idx1, int idx2) { int t = a[idx1]; a[idx1] = a[idx2]; a[idx2] = t; } |
소스코드로 실습해보기
public class ReverseArray {
static void swap(int[] a, int idx1, int idx2) {
int t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
}
static void reverse(int[] a) {
for(int i = 0; i < a.length / 2; i++) {
swap(a, i, a.length-i-1);
}
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("요솟수 : ");
int num = stdIn.nextInt();
int[] x = new int[num];
for(int i = 0; i < num; i++) {
System.out.print("x[" + i + "] : ");
x[i] = stdIn.nextInt();
}
reverse(x);
System.out.println("요소를 역순으로 정렬했습니다.");
for(int i = 0; i < num; i++) {
System.out.println("x[" + i + "] = " + x[i]);
}
}
}
'알고리즘 > 자료구조와 알고리즘' 카테고리의 다른 글
[Algorithm] 중복된 문자 제거하기 for JAVA (0) | 2021.11.05 |
---|---|
[Algorithm] 탐욕(그리디) 알고리즘 (greedy algorithm) (0) | 2021.09.30 |
[Algorithm] 이진 검색 알고리즘 (0) | 2021.09.13 |
[Algorithm][Java] 소수를 나열하는 알고리즘, 소수인지 판단하기 (0) | 2021.08.23 |
[Algorithm][Java] 기수로 변환하기 (0) | 2021.08.18 |