티스토리 뷰
𝟙. Bubble Sort (버블 정렬, 거품 정렬)
버블 정렬은 정렬하면 쉽게 생각 할수 있는 정렬 알고리즘이다. 버블 정렬은 두 개의 인접한 원소를 비교하여 정렬하는 방식이다.
버블 정렬은 데이터를 '비교'하면서 찾기 때문에 '비교 정렬'이며 정렬의 대상이 되는 데이터 외에 추가적인 공간을 필요로 하지 않기 때문에 '제자리 정렬(in-place sort)'이기도 하다. 정확히는 데이터를 서로 교환하는 과정(swap)에서 임시 변수를 필요로 하나, 이는 충분히 무시할 만큼 적은 양이기 때문에 제자리 정렬로 보는 것이다.
시간 복잡도는 O(N^2) 이다.
버블 정렬 진행 과정
초기배열이 위와 같이 주어졌을 때, 모든 원소들이 위와 같은 과정으로 비교 과정이 진행 되며, 숫자가 클때는 두 숫자가 스왑이 된다. 결국 맨 뒤에 가장 큰 숫자가 오게 된다.
두번째도 같은 방식으로 반복되어 뒤에서 두번째 위치에 2번째로 큰 숫자가 자리하게 된다.
위와 같은 예제에서는 두번만에 정렬이 완료 되었지만, 버블정렬에서는 정렬이 끝나지 않고 3번 더 반복한 뒤에 정렬이 종료 된다.
버블 정렬 코드
public static void BubbleSort() {
int[] nums = {5, 3, 1, 2, 4}
// 한 번의 반복이 완료될 때 마다 가장 큰 수는 배열의 가장 마지막 부분으로 밀리는 것이 보장된다.
for(int i = nums.length - 1; i > 0; i--) {
// 따라서, 한 번의 반복마다 가장 뒤의 인덱스는 비교하지 않도록 반복문을 설계할 수 있다.
for(int j = 0; j < i; j++) {
// 만일, 앞의 수가 뒤의 수보다 더 크다면 swap 연산을 진행해준다.
if(nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
}
𝟚. 선택 정렬 (Selection Sort)
선택 정렬은 말 그대로 현재 위치에 들어갈 데이터를 찾아 선택하는 알고리즘이다.
데이터를 '비교'하면서 찾기 때문에 '비교 정렬'이며 정렬의 대상이 되는 데이터 외에 추가적인 공간을 필요로 하지 않기 때문에 '제자리 정렬(in-place sort)'이기도 하다. 정확히는 데이터를 서로 교환하는 과정(swap)에서 임시 변수를 필요로 하나, 이는 충분히 무시할 만큼 적은 양이기 때문에 제자리 정렬로 보는 것이다.
시간 복잡도는 O(N^2) 이다.
선택 정렬 진행 과정
1. 주어진 리스트에서 최솟값을 찾는다.
2. 최솟값을 맨 앞 자리의 값과 교환한다.
3. 맨 앞 자리를 제외한 나머지 값들 중 최솟값을 찾아 위와 같은 방법으로 반복한다.
선택 정렬 코드
private static void selection_sort() {
int[] nums = {5,3,1,2,4};
int size = nums.length;
for(int i = 0; i < size - 1; i++) {
int min_index = i;
// 최솟값을 갖고있는 인덱스 찾기
for(int j = i + 1; j < size; j++) {
if(nums[j] < nums[min_index]) {
min_index = j;
}
}
// i번째 값과 찾은 최솟값을 서로 교환
swap(nums, min_index, i);
}
}
private static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
'Tech Interview > 기술 면접 준비' 카테고리의 다른 글
[Backend 개발자 면접 준비] 쿠키 vs 세션 vs 캐시 (0) | 2023.08.23 |
---|---|
[Backend 개발자 면접 준비] MVC 패턴 구조 (0) | 2023.08.22 |
[Backend 개발자 면접 준비] HTTP 메서드 (0) | 2023.08.17 |
[Backend 개발자 면접 준비] 동일성(Identity)과 동등성(Equality) (0) | 2023.08.16 |
[Backend 개발자 면접 준비] 자바에서 null을 다루는 방법 (0) | 2023.08.15 |
- Total
- Today
- Yesterday
- 취업 준비
- 자바공부
- 코딩테스트 준비
- 개발자 취업 준비
- 제로베이스 백엔드 스쿨
- 제로베이스 백준 장학금
- 코딩테스트공부
- 백엔드 개발자 기술 면접 준비
- 프로그래머스 카카오
- 주니어 개발자 취업 준비
- 프로그래머스
- 알고리즘 공부
- 개발자 면접 준비
- 프로그래머스 자바
- 알고리즘
- java
- 취업준비
- 코테공부
- 개발자 취준
- 백엔드 개발자
- 코딩테스트
- 취준
- 코딩테스트 공부
- 백엔드 개발자 취업 준비
- 자바
- 코테 준비
- 백준
- 기술 면접 준비
- 코테준비
- 알고리즘공부
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |