본문 바로가기
국비교육기관/수업

19일차_자바기초_이차원배열_메소드_정렬

by 밀키스 2021. 4. 8.

@21.04.08

JAVA 

@for-each문 

package 배열;
public class ex01for_each문 {
	public static void main(String[] args) {
		// 1. 문자열 배열 array -> 운비, 석원, 재웅, 하영, 지수
		String[] array = {"운비", "석원", "재웅", "하형", "지수"};
		// 같은 자료형만 담을 수 있다.
		// 배열의 크기는 >> 5칸 / 인덱스 번호 >> 0~4
		// 2. 안에 있는 데이터를 전부 출력
		for(int i = 0; i<array.length;i++) {
			System.out.println(array[i]);
		}
		// for문 -> 무한루프
		// for-each문 -> 배열을 사용해서 반복하는 방법
		for(String i:array) {
			System.out.println(i);}}}

for-each문은 Python 언어에서 마치 for(a in LIST)의 구조와 같은걸 말한다.

위 코드에서 2개의 for문 모두 같은 결과를 출력하며, 아래인 2번째 for문의 형태가 for-each문의 구조라 할 수 있다.

 

@Method 

 Method? 

자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 가집니다.

그중에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.

 

위와 같은 구조로 Method를 만들면 된다. 이때 위에서  static 을 쓰지 않으면

위와 같이 스크립트 파일 명으로 된 Class를 하나의 변수에 담아, 변수에 속한 모듈을 꺼내서 쓰는 식으로 내가 만든 Method를 사용해야 한다.

 

Static외에도 Private이나.... 뭐 다른건 기억도 안난다. 무튼 그냥 파이썬에서 Def 함수와 같은 기능을 하는 명령어.... 인데.. 파이썬보다 더 복잡하다. 무튼 그런 기능을 함.

%STATIC에 대해서.

더보기

Static: static은 오브젝트가 아닌 '클래스'에 귀속되는 것들(변수/메서드/클래스)를 명시하기 위한 키워드이다.

 

출처: imasoftwareengineer.tistory.com/73

@정렬 

%버블정렬 

보이는 그림과 같이 값의 크기를 비교하는데 있어 인덱스는 무조건 1씩 증가한다. 즉,- 한 루프(비교)를 돌면 최대값이 최우측에 위치하게 된다.- 위에 의해서 2번째 루프는 비교를 1번 덜 해도 된다.- 매 루프를 반복하면 비교 횟수는 계속 줄어들며 최종적으로는 최좌측의 2개의 값만 1번 비교하는 걸로 정렬은 끝이      난다.

 

버블 정렬의 개념을 보면 대충 알 수 있겠지만 그렇게 효율적인 알고리즘은 아닌것 같다...

 버블 정렬에 대한 코드

더보기
package 정렬;
import java.util.Arrays;
public class ex01버블정렬 {
	public static void main(String[] args) {
		int[] arr = {5, 4, 3, 2, 1};
		System.out.println(Arrays.toString(arr));
		int temp = arr[0];
		for(int i=1; i<arr.length;i++) {
			System.out.println("========구분======");
			for(int j=0;j<arr.length-i;j++) {
				if(arr[j]>arr[j+1]) {
					temp = arr[j+1];
					arr[j+1] = arr[j];
					arr[j] = temp;}
				System.out.println(Arrays.toString(arr));}}
		System.out.println("=========구분==========");
		System.out.println(Arrays.toString(arr));}}

한 루프마다 무조건 n번째와 n+1번째의 값을 비교하는 식으로 진행되기 때문에 temp라는 int형 변수를 지정, 이를 통해 값을 매번 비교하여 값을 변경해주었다.

%선택정렬

- 선택 정렬은 배열의 최소값을 검색하여 배열의 왼쪽부터 순차적으로 정렬을 반복하는 정렬 알고리즘이다.

- 배열이 미정렬 상태이므로 최소값 검색에는 이진 검색이 아닌 선형 검색 알고리즘을 사용한다.

 

대충 정리하면 버블정렬이 우측부터 정렬해나갔다면 선택정렬은 좌측에 최솟값을 쌓는 정렬이다.

 선택정렬에 대한 코드 

더보기
package 정렬;
import java.util.Arrays;
public class ex02선택정렬 {
	public static void main(String[] args) {
		int[] arr = {79, 46, 57, 13, 35};
		for(int i = 0;i<arr.length-1;i++) {
			int min_I =i;
			for(int j=i+1;j<arr.length;j++) {
				System.out.println(i+" "+j);
				if(arr[j]<arr[min_I]) {
					min_I=j;}
				System.out.println(Arrays.toString(arr));}
				int cnt=arr[min_I];
				arr[min_I]=arr[i];
				arr[i]=cnt;}
		System.out.println(Arrays.toString(arr));}}

한개의 루프를 돌때마다 좌측에 최솟값을 쌓는 것.

하나의 루프가 돌기전에 값 변경은 단 한번만 일어난다.

때문에 최솟값인 인덱스를 지속해서 저장해나간다.

 

- 반복문 i는 결국 배열의 가장 좌측의 인덱스를 나타낸다.- min_I라는 변수에 i 의 값을 계속해서 저장해준다. (최솟값이 될 인덱스)- 저장된 i라는 인덱스가 가장 작은 값이라면 변동없이 해당위치에 해당 값이 존재할 것.- 아니라면 반복문 변수 j가 하나씩 증가하면서 배열의 min_I번째 인덱스와 값을 비교해나간다.- min_I 인덱스보다 j번 인덱스의 값이 더 작다면 min_I번 인덱스를 j값으로 바꿔준다.- 위에 의해서 가장 좌측이 될 인덱스( i )의 값은 최솟값으로 변경될 것.

이클립스 스캔 

반응형

댓글