old/자료구조_알고리즘

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

뒷골목프로그래머 2020. 1. 25. 23:18
반응형

본 포스팅은 'Do it! 자료구조와 함께 배우는 알고리즘 입문 Java편'을 스터디 한 내용입니다.

 

 1. 배열의 역순 정렬은 요소 교환이 총 n/2회 필요함.

     1) x값을 t에 보관

     2) y값을 x에 대입

     3) t에 보관한 처음 x값을 y에 대입

static void swap(int[] a, int idx1, int idx2) {
		
        int t = a[idx1];
        a[idx1] = a[idx2];
        a[idx2] = t;

}

 

2. 배열을 역순으로 정렬

배열의의 이름이 a이고 크기가 5라면 역순정렬을 위해서는

(a[0], a[4]), (a[1], a[3]), a[2]의 쌍으로 교환이 되어야 한다.

for문을 활용한다면, i=0부터 시작해서 배열길이의 절반(a.lenght/2)만큼 반복되어야 한다.

 

static void reverse(int[] a) {
		
		for(int i=0; i<a.length/2; i++) {
			
			swap(a, i, a.length-i-1);
			
		}
		
}

 

 

전체코드

import java.util.Scanner;

public class array_switch {
	
	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-1);
			
		}
		
	}
	
	public static void main(String[] args) {
		
		Scanner stdIn = new Scanner(System.in);
		
		System.out.println("요솟수 : ");
		int num = stdIn.nextInt();
		
		int[] x = new int[num];
		
		for(int i=0; i<num; i++) {
			System.out.println("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]);
			
		}
	}

}

 

3. 연습문제 : 배열요소 역순정렬 과정과 합을 나타내는 프로그램 작성

import java.util.Scanner;

public class array_reverseEach {
	
	
	static void swap(int[] a, int idx1, int idx2) {
		
		int temp = a[idx1];
		a[idx1] = a[idx2];
		a[idx2] = temp;
		
	}
	
	static void reverse(int[] a) {
		
		for(int i=0; i<a.length/2; i++) {
			int idx1 = i;
			int idx2 = a.length-i-1;
			System.out.println("a["+idx1+"]와 a["+idx2+"]를 교환합니다.");
			swap(a, idx1, idx2);
			for(int j=0; j<a.length; j++) {
				
				System.out.print(a[j]+" ");
				
			}
			System.out.println("");
		}
		
		System.out.println("역순정렬을 마쳤습니다.");
		
	}
	
	static int sumOf(int a[]) {
		
		int sum=0;
		for(int i=0; i<a.length; i++) {
			
			sum += a[i];
			
		}
		
		return sum;
		
	}
	
	public static void main(String[] args) {
		
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("요솟수 : ");
		int num = scanner.nextInt();
		int a[] = new int [num];
		
		for(int i=0; i<num; i++) {
			
			System.out.println("a["+i+"]");
			a[i] = scanner.nextInt();
			
		}
		
		reverse(a);
		
		int sum = sumOf(a);
		
		for(int i=0; i<a.length; i++) {
			
			System.out.print(a[i]+" ");
			
		}
		System.out.println("배열요소의 합 : "+ sum);
		
	}

}

 

반응형