JAVA/강의

JAVA 강의 4일차- 배열과 NEW 그리고 정렬

record2080 2025. 1. 30. 23:50

배열의 예)

int[] studentList=new int[3]

                          // stuArr stuList stuDatas

                         //  자료형 /변수명/ 값

 

<연산자 new>

"힙 메모리 공간을 생성해주는 연산"

데이터 메모리 영역 힙 메모리 영역
-변수
-함수(메인)
-개발자의 영역
개발자가 코드로 new라고 불려야지 영역이 열림
-자동초기화. 즉, 값은 0(값이 있다)

 

<forEach문> : 향상된 for문

for (저장된 데이터의 타입 변수명: 출력할 집합 데이터) 

for(int v : stuList)  { 

    }

//이터레이터 타입(복사체) : 단지 결과를 보여줄 뿐이다

 

<플래그 로직> boolean= true or false

: 상당히 많은 부분에서 사용

: 어떤 작업이 인지 아닌지(true or false/ 양자택일)

i i<5 flag j j<i datas[i]==datas[j]
0 t f 0 f  
1 t f 0 t f
      1 f  
2 t f 0 t t
    t 1 t f

 

예) boolean flag=false; //못찾은 상태를 false로

 

for(int i=0; i< datas.length; i++)

    if(num==datas[i])

     index=i;

     flag=true; //

 

if(flag) 찾을수있다

else 찾을수 없다

 

<정렬알고리즘>

정렬은 왜 쓰나요? 서치, 검색, 탐색을 빨리 하기위해

즉, 데이터 검색을 빠르고 효율적으로 하기위해서

1. 버블정렬 

- 버블정렬에서 1회전 정렬하면 가장 큰 정 수가 제자리를 찾는다

즉, 가장 뒤에 온다

-2회전 정렬시 두번쨰로 큰 값이 제자리를 찾는다

-n개의 값이 있을 경우, (n-1)을 하면 모든 값이 제자리를 찾는다.

public static void main(String[] args) {
		datas[0]=1;
		datas[1]=2;
		datas[2]=3;
		datas[3]=4;
		datas[4]=5;

		for(int v:datas) {
			System.out.print(v+" "); //이터레이터
		}
		System.out.println();

		for(int a=0;a<datas.length-1;a++) { //길이 -1만큼 반복
			// 1회전 정렬
			for(int i=0;i<datas.length-1;i++) { // 양옆 데이터끼리 비교하는 횟수
				if(datas[i] > datas[i+1]) {
					// 교환 알고리즘
					int tmp=datas[i];
					datas[i]=datas[i+1];
					datas[i+1]=tmp;
				}
			}

			System.out.print((a+1)+"회전 정렬 완료 : ");
			for(int v:datas) {
				System.out.print(v+" ");
			}
			System.out.println();
		}
	}

 

<이진 탐색(이분 검색)> 

전제조건 : 데이터가 정렬되어 있어야 한다.

 

<최대값 찾기>

1.[0]에 있는 값이 최대값일거라고 단정짓기

    int max=datas[0];

    int maxIndex=0;

2. [1]부터 마지막 인덱스까지 돌면서 최대값보다 큰 값이 존재하는지 확인

3. max보다 큰 값을 찾은 경우 , max 재설정

public class Practice {
	public static void main(String[] args) {

	int[]datas=new int[5];
	datas[0]=1;
	datas[1]=2;
	datas[2]=3;
	datas[3]=4;
	datas[4]=5;
	for(int v:datas) {
		System.out.print(v+" ");
	}
	int max=datas[0]; //0번째 인덱스 값은 최대값
	int maxindex=0; //max 값이 저장된 인덱스 위치
	
	for(int i=1;i<datas.length;i++) {
		if(max<datas[i]) {
			max=datas[i];
		}
	}
	System.out.println();
	System.out.println(max); //5
	System.out.println("max의 인덱스 : "+maxindex);//0번째
	}
}

 

<pivot>

pivot을 쓴다면 index가 필요없음

pivot은 일종의 업다운게임

중간을 기준으로 분할해서 탐색한다.

	System.out.print("찾고싶은 정수 입력 >> ");
		int num=sc.nextInt();
		
        int START=0;
		int END=10;
		// 이진 탐색
		int pivot;
		while(true) {
			pivot=(START+END)/2; // 피벗(기준)
			if(datas[pivot] < num) { // 가운데 숫자가 입력한 숫자보다 크니?
				// 업!
				START=pivot+1;
			}
			else if(datas[pivot] > num) { // 가운데 숫자가 입력한 숫자보다 작니?
				// 다운!
				END=pivot-1;
			}
			else { // 종료조건 : 찾았다면
				break;
			}	

			if(START > END) { // 종료조건 : 못찾았다면
				// CROSS(교차) 발생
				break;
			}
		}

		if(START<=END) {
			System.out.println(num+"은 ["+pivot+"]에 있습니다.");
		}
		else {
			System.out.println(num+"은 없습니다.");
		}

 

'JAVA > 강의' 카테고리의 다른 글

JAVA 11일차 강의 - 캡슐화와 상속  (0) 2025.01.30
JAVA 강의 6일차 - 복습과 PK  (1) 2025.01.30
JAVA 강의 3일차 - 반복문  (1) 2025.01.30
JAVA 강의 1일차- 연산자  (1) 2025.01.29
JAVA 강의 2일차 - 복습과 반복문  (0) 2025.01.29