#선택 정렬
for i in range(len(array)):
min_index=i
for j in range(i+1,len(array)):
if array[min_index]>array[j]:
min_index=j
array[i],array[min_index]=array[min_index],array[i]
2. 삽입정렬: 특정 데이터를 적절한 위치에 삽입
# 삽입 정렬
for i in range(1, len(array)):
for j in range(i,0,-1): #인덱스 i부터 1까지 감소하면서 반복
if array[j]<array[j-1]: # 한 칸씩 왼쪽으로 이동
array[j],array[j-1]=array[j-1],array[j]
else: # 자기보다 작은 데이터를 만나면 그 위치에서 멈춤
break
3. 퀵 정렬
# 전통적 퀵 정렬 코드
def quick_sort(array,start,end):
if start>=end: #원소가 1개인 경우 종료
return
pivot=start #피벗은 첫번째 원소
left= start+1
right=end
while left<=right:
while left<=end and array[left]<=array[pivot]:#피벗보다 큰 데이터를 찾을 때까지 반복
left+=1
while right>start and array[right]>=array[pivot]: #피벗보다 작은 데이터를 찾을 때까지 반복
right-=1
if left>right: #엇갈렸다면 작은 데이터와 피벗을 교체
array[right],array[pivot]=array[pivot],array[right]
else: #엇갈리지 않았다면 작은 데이터와 큰 데이터를 교체
array[left],array[right]=array[right],array[left]
#분할 이후 왼쪽 부분과 오른쪽 부분에서 각각 정렬 수행
quick_sort(array,start,right-1)
quick_sort(array,right+1,end)
array=[]
quicksort_sort(array,0,len(array)-1)
print(array)
# 비효율적이지만 직관적인 퀵 정렬 코드
def quick_sort(array):
#리스트가 하나 이하의 원소만을 담고 있다면 종료
if len(array) <=1:
return array
pivot=array[0]#피벗은 첫번째 원소
tail=array[1:]#피벗 제외 리스트
left_side=[x for x in tail if x<=pivot]#분활된 왼쪽 부분
right_side=[x for x in tail if x>pivot]#분활된 오른쪽 부분
#분할 이후 왼쪽 부분과 오른쪽 부분에서 각각 정렬 수행 후 전체 리스트 반환
return quick_sort(left_side)+pivot+quick_sort(right_side)
array=[]
print(quick_sort(array))
4. 계수 정렬
# 계수 정렬
array=[] #정렬할 원소들(0보다 크거나 같음)을 담은 리스트
#모든 범위를 포함하는 리스트 선언 + 0으로 초기화
count=[0]*(max(array)+1)
for i in range(len(array)):
count[array[i]]+=1 #각 데이터에 해당하는 인덱스의 값 증가
for i in range(len(count)): #리스트에 기록된 정렬 정보 확인
for j in range(count[i]):
print(i,end=' ') #띄어쓰기를 구분으로 등장한 횟수만큼 인덱스 출력
5. 파이썬의 정렬 라이브러리
# 튜플의 두번째 원소 기준 정렬
array=[('바나나',2),('사과',5),('당근',3)]
def setting(data):
return data[1]
result=sorted(array,key=setting)
print(result)
# 성적이 낮은 순서로 학생 출력하기(정렬 알고리즘의 원리에 대해서 물어보는 문제)
n=int(input()) #2
array={}
for i in range(n): #홍길동 95 이순신 77
m=input().split()
array[m[0]]=int(m[1])
result = sorted(array.items(), key=lambda x: x[1])
for key,value in result:
print(key,end=' ') # 이순신 홍길동
[알고리즘] 이코테 - 다이나믹 프로그래밍(동적 계획법) (0) | 2024.01.11 |
---|---|
[알고리즘] 이코테 - 이진탐색 (0) | 2024.01.09 |
[알고리즘] 이코테 - DFS / BFS (0) | 2024.01.06 |
[알고리즘] 이코테 - 구현 (0) | 2024.01.05 |
[알고리즘] 이코테 - 그리디 (0) | 2024.01.02 |