estherseo
JINIWAY
estherseo
전체 방문자
오늘
어제
  • 분류 전체보기
    • 전공공부
    • CS
      • Network
      • Algorithm
      • 📖
      • python
      • django
    • Pentest
      • 📖
      • HTB
      • Machines
    • Web-hacking
      • 📖
      • Dreamhack
      • Portswigger
    • System-hacking
      • 📖
    • Mobile-hacking
    • Project
    • CVE
    • CTF
    • News & Conference
    • 자격증
    • 신기술
      • AI

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 소개

인기 글

최근 댓글

최근 글

태그

  • 스택카나리
  • 2022 네트워크관리사
  • shocker
  • 기사요약
  • HTB valentine
  • python eval
  • ASC스터디
  • 패킷잡기
  • 네트워크관리사 실기 합격
  • 다크웹 모니터링
  • 화이트햇투게더1기
  • HTB shocker
  • 화이트햇투게더1기 결과공유회
  • 시스템해킹공부
  • jwt token last character
  • CTF공부
  • 중소기업 정보보호
  • Pillow취약점
  • 세계신안보포럼
  • 화이트햇투게더
  • 다크웹 모니터링 서비스
  • ASC 스터디
  • asc
  • 셸쇼크
  • integer overflow
  • 2022 pox
  • CVE-2022-22817
  • 시스템해킹 스터디
  • pox2022
  • n00bCTF
hELLO · Designed By 정상우.
estherseo

JINIWAY

[Algorithm] 선택정렬, 삽입정렬, 계수정렬
CS/Algorithm

[Algorithm] 선택정렬, 삽입정렬, 계수정렬

2024. 6. 30. 18:56

1. 선택정렬

""" 
1. 특징
- average,worst,best : 모두 O(N^2)로 동일

2. 시간 복잡도 : O(N^2)
N + (N-1) + (N-2) + ... + 1 
(N^2+N-2)/2 => O(N^2)

"""
array = [7,4,6,2,1,9,0]

for i in range(len(array)):
    min_index = i #가장 작은 원소의 인덱스
    for j in range(i+1, len(array)):
        print(j, end=' ')
        if array[min_index] > array[j]:
            min_index = j
    print()
    array[i], array[min_index] = array[min_index], array[i] #swap
    

print(array)

 

 

 

2. 삽입정렬

"""
1. 특징
선택정렬보다 효율적임.
현재 리스트의 데이터가 거의 정렬되어 있는 상태라면 매우 빠르게 동작.

2. 시간복잡도
- worst : O(N^2)
- average : O(N^2)
- best : O(N)

"""
array = [7,4,6,2,1,9,3] 

for i in range(1, len(array)):
    for j in range(i, 0, -1):
        print(j, end=' ')
        if array[j] < array[j-1]:
            array[j], array[j-1] = array[j-1], array[j]
        else:
            break
    print()
print(array)

 

3. 계수정렬

"""
1. 특징
공간 복잡도는 높지만, 특정 조건 만족시 빠르게 동작
데이터의 크기 범위가 제한되어 정수 형태로 표현할 수 있을때만 사용 가능
최악의 경우에도 O(N+K)를 보장

2. 시간복잡도 * 공간복잡도도 O(N+K)
- worst : O(N+K)
- average : O(N+K)
- best : O(N+K)

* 최악인 경우 : 데이터가 0, 999999 단 2개일 때
* 효과적인 경우 : 동일한 값을 가지는 데이터가 여러 개 등장할 때

"""
# 가정 : 모든 원소의 값이 0보다 크거나 같다고 가정
array = [7,4,6,2,1,9,3,2] 
# 모든 범위를 포함하는 리스트 선언(0으로 초기화)
count = [0]*(max(array)+1)

for i in array:
    count[i] += 1
for i in range(len(count)):
    for j in range(count[i]):
        print(i, end=' ')

 

 

참고 - https://www.youtube.com/watch?v=KGyK-pNvWos&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=4

'CS > Algorithm' 카테고리의 다른 글

[Algorithm][다익스트라]  (0) 2024.07.02
[Algorithm] 이코테 : 두 배열의 원소 교체  (1) 2024.06.30
[Algorithm][이진탐색] 백준 1920 : 수찾기  (0) 2024.06.29
[Algorithm][dfs, bfs] 백준 1260 : dfs와 bfs  (0) 2024.06.28
[Algorithm] 백준 11660 : 구간합 구하기  (0) 2024.06.26
    'CS/Algorithm' 카테고리의 다른 글
    • [Algorithm][다익스트라]
    • [Algorithm] 이코테 : 두 배열의 원소 교체
    • [Algorithm][이진탐색] 백준 1920 : 수찾기
    • [Algorithm][dfs, bfs] 백준 1260 : dfs와 bfs
    estherseo
    estherseo
    안녕하세요😀

    티스토리툴바