728x90
반응형
배열, Array
같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조.
변수는 한 개의 데이터만 저장할 수 있다. 저장해야할 데이터의 수가 많아지면 그만큼 많은 변수가 필요하다. 이러한 경우 좀 더 효율적인 방법으로 프로그래밍하기 위해 배열이 필요하다.
배열 선언
데이터타입[] 배열명; -> 추천
int[] arr;
char[] chArr;
double[] dbArr;
String[] strArr;
데이터타입 배열명[]; -> 비추천
int arr[];
char chArr[]
double dbArr[]
String strArr[];
왜 위가 추천 아래가 비추천인지는 모르겠지만 강사님이 추천하는 방식으로 쓰기 시작함. 현업에서 위의 방법이 더 자주 쓰이나?
배열 생성
* 값 목록으로 배열생성 (배열 선언과 동시에 초기화)
-> 데이터타입[] 배열명(변수) = { 값0, 값1, 값2, 값3, ... };
int[] arr = { 1, 2, 3, 4, 5 };
String[] names = { "James", "Mike", "Tom" };
배열의 인덱스는 0부터 시작한다.
for(int i=0; i<5; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
=====================
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
names[0] = James
names[1] = Mike
names[2] = Tom
※ 값 목록으로 배열 생성할 때는 무조건 선언과 동시에 초기화를 해줘야한다.
데이터타입[] 변수; //선언 후
변수 = { 값0, 값1, 값2, ...} // 초기화 -> 에러.
public class test {
public static void main(String[] args) {
int[] arr;
arr = {1, 2, 3}; //Array constants can only be used in initializers 에러발생
}
}
* new 연산자로 배열 생성
-> 데이터타입[] 배열명(변수) = new 데이터타입[길이];
// 둘 다 가능
int[] arr = new arr[5];
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
arr[3] = 44;
arr[4] = 55;
double[] dbArr;
dbArr = new dbArr[3];
dbArr[0] = 1.1;
dbArr[1] = 2.2;
dbArr[2] = 3.3;
배열 정렬
버블 정렬, Bubble Sort;
각 round의 알고리즘
- 0번째 요소와 인접한 요소를 비교한다
- 왼쪽의 데이터가 크면 스왑한다(오름차순)
- 이방법을 마지막 두 요소까지 진행(반복)
1번 알고리즘을 이용하여 모든 요소가 정렬될 때까지 반복한다
- 각 Round가 진행될 때마다 가장 오른쪽 1개의 요소가 정렬된 상태가 된다
- 각 round가 진행되면 정렬해야하는 요소가 하나씩 줄어든다
버블정렬 한번 반복했을때 가장 큰 값이 가장 오른쪽으로 밀려남 (정렬 완료)
3 2 5 4 1
2 3 4 1 5 - 1 round
2 3 1 4. - 2 round
2 1 3 - 3 round
1 2 - 4 round
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {3,2,5,4,1};
//--원본 출력---
System.out.println("---정렬 전 ---");
for(int i=0; i< arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
//-------------------
System.out.println("---정렬 진행---");
//----버블 정렬----
for(int j=0; j<arr.length-1; j++) { //(length-1) round 반복, 4round 반복함
for(int i=0; i<arr.length-1-j; i++) { //각 round
if( arr[i] > arr[i+1]) {
//스왑
int tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
//--- 정렬된 이후 출력---
System.out.println("----정렬 후---");
for(int i=0; i< arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
//
}
}
===============================
---정렬 전---
3 2 5 4 1
---정렬 진행---
2 3 4 1 5
2 3 1 4 5
2 1 3 4 5
1 2 3 4 5
----정렬 후---
1 2 3 4 5
반응형
'개발 > 자바' 카테고리의 다른 글
자바 다차원배열 (0) | 2021.01.21 |
---|---|
자바 배열 복사 (0) | 2021.01.20 |
자바 {맥북} 내가 자주 사용하는 이클립스 단축키 정리. (0) | 2021.01.17 |
자바 if문과 switch문을 비교해보자. (0) | 2021.01.17 |
자바 별찍기 - 무서워하지 말자. 차근차근 이해해보자 (1) | 2021.01.17 |
댓글