알고리즘/자료구조와 알고리즘

[Algorithm][Java] 배열 안 요소를 역순으로 정렬하기

정석이 2021. 8. 17. 14:43

 

 

배열 요소를 역순으로 정렬하는 알고리즘을 살펴보자.

 

 

 

 

 

 

예시

 

 

 

 

 

 

 


 

 

배열 역순 정렬 과정

 

 

 

 

 

배열 역순 정렬 과정

 

 

 

 

 

위 그림은 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]);
		}
	}
	
}