Sorting 알고리즘

2021. 10. 8. 21:02·2-2/알고리즘
목차
  1. 1. Insertion sort
  2.  
  3. 2. Merge sort

* sorting 알고리즘

리스트를 입력받아서 increasing order로 된 순열 (걍 정렬된 리스트)를 리턴함

1. Insertion sort

a. 원리

: 정렬된 쪽에 키를 하나씩 넣는다. 키 넣을 땐 정렬된 쪽의 젤 큰거부터 작은거까지 비교하면서 자리를 찾는다

-> 비교 대상이랑 키를 비교하고, 비교대상이 더 크면 비교대상을 뒤로 민다. 그리고 끝까지 이 과정을 하고 비어있는 자리 (i+1)에 저장해둔 키를 넣는다

 

b. pseudo code 슈도코드

INSERTION-SORT(A)

  for j=2 to A.length

    key=A[j] //key 저장해둠

    i=j-1 //i는 비교 대상

    while i>0 and A[i]>key //크면 그 큰친구를 오른쪽으로 밀고, 작으면 걍끝냄!

           A[i+1]=A[i]

           i=i-1 // 다음 비교 대상 설정 (바로 이전꺼~)

    A[i+1]=key //저장해둔 키를 밀어서 비어있는 자리에 넣음 (마지막에 while끝날 때 비교대상으로 이전꺼 설정햇으므로 i+1해줘야함)

 

c. runnung time 

* 러닝 타임 -> instrunction의 총 개수를 구하는 것. -> input size에 가장 많이 영향 받음!!!!!

-> 인풋 사이즈 n을 변수로 러닝타임을 정의하게됨 -> T(n)  

이 경우의 러닝타임은 cost x time의 합 !

-> running time

-> best case, average case, worst case가 존재한다 !! (  tj가 어떻게 되냐에 따라 달라짐 )

1. Best case

: A가 이미 sorted 리스트라서, tj가 항상 1인경우 (걍 루프 실행xx)!

->

= an + b

2. worst case

: A가 역순으로 정렬되어 있어서 tj가 항상 j일 경우 (루프 i~0 이렇게 다 시행해야됨 -> 결국 j번이 됨) (max 숫자)

 


2. Merge sort

a. 원리

: 두 sorted list를 합친다. 각각 리스트의 맨첨 애를 비교해서 작은 애를 새로운 리스트에 넣는 방식

-> 리스트를 1개 될때까지 다 절반으로 divide 한 담에 차례로 merge 합니다

 

1.divide

2. conquer

머지하는 순서도 썻더욤 ㅎㅎ

* 머지할 때, 밑에가 다 처리된 애들만 Merge한다 !!!!

 

b. 슈도 코드

맨끝까지 가서 합치고 그다음친구의 끝까지가서 합치고 위로가면서 하나씩 합치면서 위의꺼 끝내고, 똑같이 밑에꺼 감 

c. running time

* 연산횟수 구할 때 -> 루프 말고는 다 상수니까 루프에 집중!

*combine- 머지함수

-> T(n) = ?

 

 

-> recursion tree를 그려서 계산한다 !!

 

 

 

 

 

-> recursion tree

'2-2 > 알고리즘' 카테고리의 다른 글

Sorting in linear time  (0) 2021.10.16
quick sort  (0) 2021.10.15
Heapsort  (0) 2021.10.12
Solving recurrences  (0) 2021.10.10
Asymptotic notation  (0) 2021.10.10
  1. 1. Insertion sort
  2.  
  3. 2. Merge sort
'2-2/알고리즘' 카테고리의 다른 글
  • quick sort
  • Heapsort
  • Solving recurrences
  • Asymptotic notation
jen.dev
jen.dev
🪽🪽🪽
  • jen.dev
    ㅇTL
    jen.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • 2-2 (25)
        • 파이썬, 자료구조 (11)
        • 데베시 (3)
        • 컴퓨터 네트워크 (2)
        • 알고리즘 (7)
        • 시스템 프로그래밍 (2)
      • 2-1 (28)
        • 객체지향 - java (14)
        • 자료구조 (c) (14)
      • draft (13)
        • swift (4)
        • html, javascript (8)
        • 리액트네이티브 (0)
        • 주절주절 (1)
        • 빅데이터 (0)
      • life (1)
      • Database (1)
      • Project-Doggy (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jen.dev
Sorting 알고리즘

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.