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
- 파일 url
- oauth
- 프론트엔드 과제
- api 비동기처리
- 프리코스
- this
- 검색
- compateto
- 프론트엔드
- 딥다이브
- redis
- bucket4j
- 모던 자바스크립트
- AWS
- 타입스크립트
- TypeORM
- api 요청 수 제한
- 우아한테크코스
- 유효시간 설정 url
- invalid_grant
- 자바스크립트
- NestJS
- concurrency limit
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- 스프링부트
- 프로그래머스
- Deep Dive
- 우아한 테크코스
- Dev-Matching
- 음악 url 파일 다운로드
Archives
- Today
- Total
개발 알다가도 모르겠네요
계수 정렬 (counting sort) 을 간단하게 알아보자. 본문
728x90
계수 정렬을 간단하게 설명하면?
숫자들 간 비교를 하지 않고 크기를 기준으로 정렬!
- 모든 데이터의 크기 범위를 메모리 상에 표현할 수 있어야 하며 입력 데이터가 큰 경우 매우 비효율적입니다.
- 범위 조건이 있는 경우에 한해서 매우 빠릅니다.
- 배열 인덱스의 크기를 기준으로 정렬합니다.
구현 과정
public class Main {
public static void main(String[] args) {
int[] arr = {1,3,2,4,1,23,12,12,3,12,3,23,23};
int[] cnt = new int[30]; //최대값의 범위를 30으로.
for(int i=0; i<30; i++) //배열 초기화
cnt[i]=0;
for(int i=0; i<arr.length; i++) {
cnt[arr[i]-1]++; //arr배열의 값과 동일한 cnt배열 번호에 삽입. 해당 번호의 배열의 값 증가.
} //-1 해준 이유: 인덱스는 0부터 시작하기 때문. ex)arr[i]=30일 때, cnt[30] <- Error
for(int i=0; i<30; i++) { //cnt배열을 1~30까지 탐색
for(int j=0; j<cnt[i]; j++) {
System.out.print(i+1+" "); //배열의 값만큼 반복해서 출력. //다시 +1.
}
}
}
}
시간 복잡도
- Worst : O(n)
- Average : O(n)
- Best : O(n)