Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Lombok
- springMVC
- pagination
- 이클립스
- DB생성
- MySQL시작하기
- Postman
- spring
- windows10
- wappalyzer
- 스프링에러
- SQL
- VUE
- NullPointerException
- K8S
- gradle
- Seek_Keyset
- offset
- Java
- appleM1
- CloutNative
- MYSQL에러
- 우분투에war배포
- SpringBoot
- String
- intellij
- restful api
- MySQL
- minikube
- frontend
Archives
- Today
- Total
미운 오리 새끼의 우아한 개발자되기
[정렬 #1] 삽입 정렬(Insertion Sort) w. Java 본문
삽입정렬은 자료배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다.
특징 및 장점
- 레코드가 적고, 이미 정렬된 자료 배열일 경우 매우 빠르다.
- 구현이 간단하다.
- 안정 정렬(중복된 값을 입력 순서와 동일하게 정렬하는 정렬 알고리즘)이다.
- in-place 알고리즘(보조 변수에 대해 약간의 추가 저장 공간이 허용되는 알고리즘)이다.
단점
- 레코드의 이동이 많이 일어나는 알고리즘이므로 레코드가 많을수록 비효율적이다.
Psuedo Code
INSERTION-SORT (A)
for j <- 2 to length[A]
do key <- A[j]
Insert A[j] into the sorted sequence A[1 . . j - 1].
i <- j - 1
while i > 0 and A[i] > key
do A[i + 1] <- A[i]
i <- i - 1
A[i + 1] <- key
Java로 구현
void insertionSort(int[] arr){
for(int idx=1; idx < arr.length; idx++){
int temp = arr[idx];
int aux = idx-1;
while((aux>=0) && (arr[aux]>temp)){ // 앞 레코드가 해당 레코드보다 큰 경우
arr[aux+1] = arr[aux]; // 해당 레코드 값을 앞 레코드 값으로 변경
aux--;
}
arr[aux+1] = temp; // 앞 레코드를 해당 레코드의 변경 전 값으로 변경 (만약 위의 while문을 안탔다면 레코드 값은 동일)
}
}
시간 복잡도
최선: n -> 이미 레코드가 정렬되어 있는 경우
평균: n^2
최악: n^2 -> 레코드가 역순으로 정렬되어 있는 경우
Reference
https://ko.wikipedia.org/wiki/삽입_정렬
https://www.ee.ryerson.ca/~courses/coe428/sorting/insertionsort.html
'Algorithm' 카테고리의 다른 글
[알고리즘] 유클리드 호제법 in Java (최대공약수, 최소공배수) (0) | 2022.02.25 |
---|---|
[정렬 #3] 퀵 정렬(Quick Sort) w.Java (0) | 2022.01.25 |
[정렬 #2] 합병 정렬(Merge Sort) w.Java (0) | 2022.01.25 |