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 |
29 | 30 | 31 |
Tags
- 구간합구하기
- 백준 11659
- 알고리즘
- 싱글톤패턴
- Array.asList
- String.valueOf()
- 투포인터알고리즘
- 자바
- 코드스테이츠 백엔드
- Spring Web MVC
- 코드스테이츠
- java
- 백준
- 스택
- 재귀와반복문
- 재귀함수
- GCP
- 버블정렬
- 성능테스트툴
- OOP
- List.of
- 코딩테스트
- vm인스턴스생성
- MySQL
- 인텔리제이
- Spring MVC 동작원리
- 클라우드에서 도커 실행하기
- Spring MVC 구성요소
- 11659
- 프로그래머스
Archives
- Today
- Total
순간을 기록으로
[JAVA] 삽입정렬(Inserting Sort) 본문
삽입정렬이란 현재 원소를 타깃으로 한다. 그리고 현재 원소의 이전 원소들을 비교해서 이전 원소가 크면 이전 원소를 현재 원소로 밀어준다. 그리고 이전 원소가 크지 않을 때 타깃 원소를 넣어주는 정렬 방법이다.
삽입 정렬 특징
- 데이터를 비교하면서 정렬하므로 비교 정렬이다.
- 데이터 비교할 때 추가적인 공간을 요구하지 않으므로 제자리 정렬(in-place sort)이다.
삽입정렬 장점
- 제자리 정렬이라서 추가적인 메모리 소모가 적다.
- 만약 거의 정렬된 상태라면 매우 효율적이다. 즉 최선의 경우 시간 복잡도는 O(N)
- 안장 정렬이 가능하다.
삽입정렬 단점
- 정렬이 역순으로 되어있으면 매우 비효율적이다. 즉 최악의 경우 시간 복잡도는 O(N^2)
- 데이터의 정렬 상태에 따라 성능 편차가 크다.
코드
import java.util.Scanner;
public class Main {
public int[] insertSort(int n, int[] arr) {
for (int i=1; i<n; i++) { // 두 번째 원소부터 시작
int target = arr[i]; // 타켓 설정
int j;
for (j=i-1; j>=0; j--) { // j: 타겟으로 바로 앞 원소부터 비교
if (target < arr[j]) { // 바로 앞 원소가 타겟보다 크다면
arr[j+1] = arr[j]; // 앞 원소를 뒤로 민다.
}
else break; // 앞 원소가 타겟보다 작다면 그 앞에 있는 원소는 이미 정렬된 상태이므로 볼 필요 없다.
}
arr[j+1] = target; // 마지막으로 현재 j위치에서 +1을 한 위치에 target을 넣어준다.
}
return arr;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
for(int i=0; i<n; i++){
arr[i] = in.nextInt();
}
Main T = new Main();
for (int x : T.insertSort(n, arr)) {
System.out.print(x + " ");
}
}
}
참고: https://st-lab.tistory.com/179
'Problem Solving' 카테고리의 다른 글
[JAVA] 슬라이딩 윈도우를 이용한 최대 매출 (0) | 2022.01.09 |
---|---|
[JAVA] 재귀로 구현하는 팩토리얼 (0) | 2022.01.07 |
[JAVA] 크레인 인형뽑기 (0) | 2022.01.07 |
[재귀] 이진수출력 (0) | 2022.01.05 |
[정렬] 버블정렬 (0) | 2022.01.05 |
Comments