본문 바로가기

개발자노트

정렬 기본

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회전 정렬

			}

		}
	}
}

'개발자노트' 카테고리의 다른 글

정렬을 이용한 최대값 찾기  (0) 2022.06.13
정렬 기본2  (0) 2022.06.13
배열을 이용한 학생기록부 예제  (0) 2022.06.10
배열의 기초2  (0) 2022.06.10
배열의 기초  (0) 2022.06.10