Sorting 알고리즘

2021. 10. 8. 21:02·2-2/알고리즘

* 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
'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 알고리즘
상단으로

티스토리툴바