배열
- 배열 복사
- 배열 크기 증가
- 배열 내용 복사
- for(int i = 0; i < m.length; i++)
temp[i] = m[i]; - System 클래스 안에 배열을 복사하는 arraycopy()함수가 있음
System.arraycopy(복사할 원본, 복사 시작 위치, 복사 된 배열, 저장 시작 위치, 크기);
- for(int i = 0; i < m.length; i++)
- 배열 별 초기 값
- byte short int long -> 0
- float double -> 0.0
- boolean -> false
- char -> ’\u0000’
- 참조 타입(String) -> null
- char배열과 String클래스
- String -> char[] 형변환
char [] 배열명 = 문자열 변수명.toCharArray(); - char[] -> String
String 변수명 = new String(char형 배열명);
- String -> char[] 형변환
- 다차원 배열
- 정의 : 2차원 배열 이상
- 표현 방법 & 크기
- 1차원 배열 : 배열의 각 요소를 열로만 표현
배열명.length : 열 크기 - 2차원 배열 : 배열의 각 요소를 형, 열로만 표현
int [][] 배열명 = new int [4][2] -> 4행 2열의 2차원 배열
배열명.length : 행 크기
배열명[i].length : I행의 열 크기 - 1차원 배열 : 배열의 각 요소를 열로만 표현
- 3차원 배열 : 배열의 각 요소를 면, 행, 열로만 표현
int [][][] 배열명 = new int [3][4][2] -> 3면 4행 2열의 3차원 배열
배열명.length : 면 크기
배열명[i].length : i면의 행 크기
배열명[i][j].length : i면 j행의 열 크기 - 4차원 배열 : 배열의 각 요소를 권, 면, 행, 열로만 표현
- 사용 예
- 1학년 1반에 30명 씩 8반인 경우 문제) 7반의 15번 학생의 국어 점수
int [] m1 = new int [30*8]; kors[6*30+15-1];
int [][] m2 = new int[8][30]; kors[6][14]; - 1~3학년, 1학년에 8반, 1반에 30명 문제) 3학년 5반 20번 학생의 국어 점수
int [] m1 = new int [3*8*30]; kors[2*8*30 + 4*30 + 20-1];
int [][][] m3 = new int [3][8][30]; kors[2][4][19];
- 1학년 1반에 30명 씩 8반인 경우 문제) 7반의 15번 학생의 국어 점수
- 동적 배열
- 정의 : 크기가 정해져 있지 않고 프로그램 실행 중에 크기가 정해지는 배열
- 코드 : 자료형 [] 배열명;
배열명 = new 자료형[배열크기];
- 2차원 <-> 1차원 배열 변경
- 1차원 배열 -> 2차원 배열
for (int I = 0; I < 배열명.length; I++){ 배열명[i / 배열명[0].length][i % 배열명[0].length] = 1차원 배열명[i]; } - 2차원 배열 -> 1차원 배열
ㄱ) for (int I = 0; I < 배열명.length; I++){ for (int j = 0; j < 배열명[i].length; j++){ 배열명[배열명[i].length * I + j] = 배열명[i][j] } } ㄴ) for (int I = 0, k = 0; I <배열명.length; I++){ for (int j = 0; j < 배열명[i].length; j++, k++){ 배열명[k] = 배열명[i][j]; } }
- 1차원 배열 -> 2차원 배열
정렬
- 정의 : 자료를 일정한 기준에 따라서 나열한 것
- 방법
- 오름차순 정렬(ascending) : 작은 것부터 큰 것 순으로 정렬
ex) 0123456, abcdef, ㄱㄴㄷㄹㅁㅂ - 내림차순 정렬(descending) : 큰 것부터 작은 것 순으로 정렬
ex) 6543210, fedcba, ㅂㅁㄹㄷㄴㄱ
- 오름차순 정렬(ascending) : 작은 것부터 큰 것 순으로 정렬
- 종류 : 버블, 선택, 삽입, 병합, 퀵, 힙 정렬
- 버블 정렬(bubble sort)
- 방법 : 서로 이웃한 데이터들을 비교하여 가장 큰 데이터를 가장 뒤로 보내는 정렬
- 코드
for (int i = 0; i < 배열명.length-1; i++){ for (int j = 0; j < 배열명.length –1 –i; j++){ if(배열명[j] > 배열명[j+1]){ int temp = 배열명[j]; 배열명[j] = 배열명[j+1]; 배열명[j+1] = temp; } } }
ex) int [] m = {3,5,2,4,1}; 3 2 5 4 1 2 3 4 1 5 2 1 3 4 5 1 2 3 4 5 3 2 4 5 1 2 3 1 4 5 3 2 4 1 5 1회전 2회전 3회전 4회전
- 선택 정렬(selection sort)
- 방법 : 맨 앞부터 현재 위치의 수와 나머지 수중 가장 작은 것과 위치를 바꿔 작은 수를 앞으로 오게 만드는 정렬
- 코드 1
for (int i = 0; i < 배열명.length-1; i++){ for (int j = i + 1; j < 배열명.length; j++){ if(배열명[i] > 배열명[j]){ int temp = 배열명[i]; 배열명[i] = 배열명[j]; 배열명[j] = temp; } } }
ex) int [] m = {3,5,2,4,1}; 3 5 2 4 1 1 3 5 4 2 1 2 4 5 3 1 2 3 4 5 2 5 3 4 1 1 2 5 4 3 1 2 3 5 4 1 5 3 4 2 1회전 2회전 3회전 4회전 - 코드 2
for (int i = 0; i < 배열명.length-1; i++){ min = 999; for (int j = i; j < 배열명.length; j++){ if(min> 배열명[j]){ min = 배열명[j]; idx = j; } int temp = 배열명[j]; 배열명[j] = 배열명[idx]; 배열명[idx] = temp; } }
ex) int [] m = {3,5,2,4,1}; 1 5 2 4 3 1 2 5 4 3 1 2 3 4 5 1회전 2회전 3회전