제로베이스 데이터 취업 스쿨 과정 학습 내용을 정리한 포스팅입니다.
📍 이진탐색
정렬되어 있는 자료구조에서 중앙값과의 크고 작음을 이용해서 데이터를 검색한다.
nums = [4, 10, 22, 5, 0, 17, 7, 11, 9, 61, 88]
nums.sort()
searchData = 17
result_idx = -1
start_idx = 0
end_idx = len(nums) - 1
mid_idx = (start_idx + end_idx) // 2
mid_value = nums[mid_idx]
while True:
if searchData == nums[len(nums) -1]:
result_idx = len(nums) - 1
break
if searchData > mid_value:
start_idx = mid_idx
mid_idx = (start_idx + end_idx) // 2
mid_value = nums[mid_idx]
elif searchData < mid_value:
end_idx = mid_idx
mid_idx = (start_idx + end_idx) // 2
mid_value = nums[mid_idx]
if searchData == mid_value:
result_idx = mid_idx
break
- 검색(찾으려는 값과 일치하는 지 확인)할 때 중간값(mid_value)와 비교한 후, 반절을 고려 대상에서 제외해나가는 과정을 반복하기 때문에 빠르게 탐색할 수 있다.
📍 버블정렬
처음부터 끝까지 인접하는 인덱스의 값을 순차적으로 비교하면서 큰 숫자를 가장 끝으로 옮기는 알고리즘
nums = [10, 2, 7, 21, 0]
length = len(nums) - 1
for i in range(length):
for j in range(length - i):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
print(nums) # [0, 2, 7, 10, 21]
- 첫번째 for문의 첫 회에서 제일 큰 값이 맨 끝으로 가게 된다.
- 두번째는 그 다음으로 큰 값을 3번째에, 세번째는 그 다음으로 큰 값을 2번째에 두는 과정이 반복되는 것
📍 삽입정렬
왼쪽에 정렬되어 있는 자료배열과 비교하여 오른쪽 값의 정렬 위치를 찾아 삽입한다.
nums = [5, 10, 2, 1, 0]
for i1 in range(1, len(nums)):
i2 = i1 - 1
cNum = nums[i1]
while nums[i2] > cNum and i2 >= 0:
nums[i2 + 1] = nums[i2]
i2 -= 1
nums[i2 + 1] = cNum
- for 문에서 현재 기준이 되는 오른쪽의 값을 설정.
- while 문에서 왼쪽에 있는 값들이 기준 값보다 크면 값을 바꿔주는 과정 진행.
📍 선택정렬
주어진 리스트 중에 최소값을 찾아 그 값을 맨 앞에 위치한 값과 교체하는 방식
nums = [4, 2, 5, 1, 3]
for i in range(len(nums) -1):
min_idx = i
for j in range(i+1, len(nums)):
if nums[min_idx] > nums[j]:
min_idx = j
nums[i], nums[min_idx] = nums[min_idx], nums[i]
'Programming > Python' 카테고리의 다른 글
파이썬 알고리즘 - 근삿값, 재귀, 병합정렬, 퀵 정렬 (0) | 2023.06.01 |
---|---|
파이썬 자료구조 - 딕셔너리(dictionary) (0) | 2023.05.25 |
파이썬 자료구조 - 리스트(list), 튜플(tuple) (0) | 2023.05.25 |
파이썬 수학 - 약수, 소수, 소인수, 진법 변환, 수열, 순열, 조합 (0) | 2023.05.23 |
파이썬 중급 - 03 예외 처리, finally, Exception, 파일 쓰기, 읽기 (0) | 2023.05.11 |