살아가는 이유_EU
내가 살아가는 이유, 삶
살아가는 이유_EU
전체 방문자
오늘
어제
  • 삶 (159)
    • 이유's EATERY (16)
      • 맛집 (10)
      • 까페 (4)
      • 맛있는 Recipe (1)
    • 이유's LIFE (16)
      • 국내여행 (5)
      • 해외여행 (2)
      • 운동 (1)
      • 취업정보 (0)
      • 끄적끄적 (5)
      • 일기쟝 (3)
      • 세상 이야기 (0)
      • 결혼 준비 (0)
    • 이유's Programming (43)
      • JavaScript (6)
      • Java (7)
      • C++ (0)
      • DBMS (24)
      • Spring (3)
      • til (1)
      • HTTP (2)
    • 이유's REVIEW (13)
      • BOOK (6)
      • PROGRAM or MOVIE (5)
      • PRODUCT 제품리뷰 (2)
    • 이유's STUDY (31)
      • 수업 관련 (2)
      • IT 시사 (2)
      • IT NEWS (2)
      • IVIEW (0)
      • IOS 앱 만들기 (0)
      • 알고리즘 문제풀이 (23)
      • PM data literacy (2)
    • 이유's ENGLISH (13)
      • Writing about something! (12)
      • Feedback (1)
      • TIL (0)
    • 이유's DB 공부 (1)
      • MySQL DB (0)
      • Postgre (1)
    • Computer 공부 (17)
      • Backend question (10)
      • Clean architecture (2)
      • Operating system (2)
      • Network (3)
      • 항해 (0)

블로그 메뉴

  • 홈
  • EATERY's 맛집
  • CAFE 까페
  • Recipe 레시피
  • IT 공부
  • 방명록
  • 태그

공지사항

인기 글

태그

  • 어게인마이라이프
  • 고메동 카페
  • 묵리
  • 자세요정
  • 자바스크립트
  • 흑임자 크림
  • React.memo
  • 고메커피
  • have something to do with
  • Array로 접근
  • memoziation
  • 맛집
  • 용인까페
  • key 로 접근
  • 현명하게 리액트
  • 아메리카토노
  • 렌더링 수 줄이기
  • go hand in hand
  • 송계옥
  • 용인맛집
  • 영어공부
  • 삼돈식탁
  • 용인추천
  • 파스타맛집
  • have something to do with뜻
  • map 하는 법
  • 피지오필로소피
  • 스쿤브레드
  • 인절미 티라미수
  • 스테이크

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
살아가는 이유_EU

내가 살아가는 이유, 삶

[ 알고리즘 ] 선택 정렬 / 빅오 표기법
이유's Programming/Java

[ 알고리즘 ] 선택 정렬 / 빅오 표기법

2020. 8. 18. 10:23
728x90
반응형

오늘 할 포스팅은, 정렬 중 대표적인 정렬인 선택 정렬과 이를 수행하는 시간에 대한 시간 복잡도를 나타내는 [빅오 표기법] 에 대한 내용입니다.

 

알고리즘은 크게 몇 가지의 범주로 나뉩니다.

 

1. 상수시간 : 실행시간이 입력 크기에 의존하지 않으면 알고리즘은 상수시간을 따른다고 함. (ex. 1/ 정말 상수 ) 

 

2. 선형 : 실행시간이 입력의 크기에 비례하면 알고리즘은 [선형] 이라고 함. ( ex) 2n -1 )

 

3. 이차 : 실행시간이 n2 에 비례하면 이 알고리즘을 이차라고 합니다. ( e.x) for 문 안에 for 문이 들어가는 경우  ) 

... 등 


2.1 선택정렬이란 ? 

 

선택정렬은 어떤 요소를 선택해서 가장 작은 value 를 찾아 그 index 에 넣는 정렬 알고리즘을 의미합니다.   

 

아래와 같은 코드 예시에서 선택정렬의 시간복잡도가 얼마인지 알아보겠습니다. 

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
32
33
34
35
36
public class SelectionSort {
 
    /**
    * Swaps the elements at indexes i and j. 두 element 를 한마디로 바꾸는 동작
    */
    public static void swapElements(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
 
    /**
     * Finds the index of the lowest value
     * starting from the index at start (inclusive)
     * and going to the end of the array.
     */
    public static int indexLowest(int[] array, int start) {
        int lowIndex = start;
        for (int i = start; i < array.length; i++) {
            if (array[i] < array[lowIndex]) {
                lowIndex = i;
            }
        }
        return lowIndex;
    }
 
    /**
     * Sorts the elements (in place) using selection sort.
     */
    public static void selectionSort(int[] array) {
        for (int i = 0; i < array.length; i++) {
            int j = indexLowest(array, i);
            swapElements(array, i, j);
        }
    }
}
Colored by Color Scripter
cs

1)  우선 첫번째로 swapElmenets 라는 함수의 시간복잡도는 [ 상수시간 연산 ] 입니다. 단순히 요소를 읽고 쓰기만 하는

 

것이기 때문에 이에 대한 연산은 상수 연산입니다. 

 

 

2) 두번째 method 인 indexLowest 에 대해서 살펴보겠습니다. 이와 같은 indexLowest 에 관한 연산은 주어진 숫자 start

 

에서 시작해서 for 문을 array 의 length 까지 돌게 됩니다. 비교회수는 n-1 이 되기 때문에 따라서 index Lowest 의 메소

 

드는 선형이 됩니다. 

 

3) 세번째 method 이자 마지막 method 인 selectionSort 도 한번 알아보겠습니다. 이 해당 selectionSort 역시 배열을 정

 

리하는 함수입니다. 이 역시, 해당 i 가 0 부터, n-1 까지 n 번 돌기 때문에 선형 (즉 n 의 시간 복잡도) 가 됩니다 .

 

4) 종합적으로 하면, n (indexLowest) 안에 n(selectionSort) 의 시간 복잡도가 들어있으므로 총 연산횟수는 n2 에 비례하

 

기 됩니다. 

 


 

2.2 빅오 표기법

 

어떤 함수 f(n) 을 O(g(n))으로 표현하기 위한 표기법이라고 말씀드리고 싶습니다. 

 

수학적 정의로는 아래와 같습니다 .

 

  1. 최고차항만 남기고 다 무시한다. -> n이 엄청 크다고 가정하기 때문

  2. 계수도 무시한다.

 

2.3 실습 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'이유's Programming > Java' 카테고리의 다른 글

Two Sum - LeetCode  (0) 2021.10.12
[ 자료구조 ] LinkedList 공부  (0) 2020.08.31
Java Interface  (0) 2020.08.18
Java input vs output System  (0) 2020.07.20
Java input vs output System  (0) 2020.07.20
    '이유's Programming/Java' 카테고리의 다른 글
    • Two Sum - LeetCode
    • [ 자료구조 ] LinkedList 공부
    • Java Interface
    • Java input vs output System
    살아가는 이유_EU
    살아가는 이유_EU
    안녕하세요. 초보개발자의 일상을 담은 블로그입니다.

    티스토리툴바