
2025.03.16
WEEK01 :
배열, 문자열, 반복문과 재귀 함수, 복잡도(BigO,시간,공간), 정렬, 완전 탐색, 정수론
자료구조와 함계 배우는 알고리즘 입문 책과 함께이론을 다시 해보자😊
어제에 이어서 공부를 계속 해보자
정렬 알고리즘의 핵심은 교환, 선택, 삽입
a = [3,2,5,1]
for i in range(len(a)-1):
for j in range(i+1,len(a)):
if a[i] > a[j]:
a[i], a[j] = a[j], a[i]
print(a)
>>>[1, 2, 3, 5]
[9,1,3,4,6,7,8] <- 거의 정렬이 완료된 상태
- 9만 뒤로가면 정렬이 끝남
- 그래서 정렬을 앞뒤로 한번씩 번갈아 수행하면서 작업 속도를 향상시킬 수 있음
def selection(a: list):
for i in range(len(a)-1):
j = a.index(min(a[i+1:]))
if a[i] > a[j]:
temp = a[j]
a[j] = a[i]
a[i] = temp
selection(a)
print(a)
def insertion(a):
for i in range(1,len(a)): #정렬 안된 배열에서 하나씩 뽑음
for j in range(i,0,-1):
if a[j-1] > a[j]:
a[j-1], a[j] = a[j], a[j-1]
insertion(a)
print(a)
heap - 부모의 값이 자식 노드의 값보다 항상 크거나 작은 완전 이진 트리
힙은 1차원 배열로 표현이 가능함. 최댓값은 항상 루트에 존재한다(max_heap)

부모 = a[(i-1)//2]
왼쪽 자식 = a[i*2+1]
오른쪽 자식 = a[i*2 + 2]
n = 입력 데이터의 개수 (리스트 길이)
k = 값의 범위 (가장 큰 값)
매번 sort() 쓰다가 정렬 직접하려니 힘들다.