package class01;
public class Test01 {
public static void main(String[] args) {
// 배열 -> 자료구조 + 알고리즘
// "정렬" -> "탐색(검색)"을 하려고
/*
* 배열을 사용한다는 건, 여러개의 데이터를 다루는 상황! 탐색(검색)하겠다는 이야기! 탐색을 효율적으로 하려면? -> 정렬
*/
// 배열 정렬 알고리즘
// : 버블,삽입,선택,퀵,셀,도수,....
// [버블(거품) 정렬]
// 오름차순 정렬 -> tmp(교환알고리즘) 사용(a가 b보다 무조건 작음)
// (a,b,c,d) -> a와b, b와c, c와d를 비교하면서 정렬
// 1회전 정렬을 하게 되면 : 가장 큰 수가 본인 자리를 찾아갈 수 밖에 없다.
// 가장 빠른 로직은 아님!!
// 빨리 최소값이나 최대값이 중요한 상황에서는 유리함
// 문제상황)30명 학생 성적 데이터를 저장 -> 배열
// 랜덤으로 저장함: 28번 30번 3번 ...
// 사용하는 상황: 랜덤하게 데이터를 저장하면 무조건 처음부터 끝가지 하나하나 탐색할 수 박에 없다.
// ex) 누구는 운이 좋아서 맨 처음 있어서 5초, 운나쁘면 맨 뒤에 저장되어 있어서 10분
// 만화카페) 도서검색대-> 검색 위치
// 카테고리,이름 순서대로 저장
int[] data = { 4, 3, 5, 1, 2 };
// 배열을 알고 있을 때 for타이핑 후 컨트롤 스페이스 해서 하면 length까지 자동완성
// 혹은 int[] data=new int[5];
// -> {0,0,0,0,0} 으로 초기화가 된다
// System.out.println(data[3]);
// 유지보수 유리하게 하기 위해 숫자가 아닌 data.length로 작성
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
/*
* data[0] 이랑 data[1]이랑 비교함, 더 큰 수를 ([1]로) 보낼 예정 만약에, 앞의 수가 더 크다면 교환 -> if문
* 스도코딩은 아래식
*/
for (int a = 0; a < data.length; a++) { // 반복문을 요소의 갯수만큼 반복한다.
for (int i = 0; i < data.length - 1; i++) { // ★ length-1이 중요 ★ n개의 숫자에선 n-1회까지 수행하기 때문에
if (data[i] > data[i + 1]) {
System.out.println("교환!");
int tmp = data[0];
data[0] = data[1];
data[1] = tmp;
} // 1회전 정렬
}
}
}
}