정렬이란 데이터를 크기 순으로 나열 하는 것을 말한다.
정렬에는 큰 값 부터 나열하는 내림차순이 있고, 작은 값 부터 나열하는 내림차순이 있으며 오늘 학습한 정렬으로는 버블정렬, 선택정렬, 삽입정렬이 있다
버블정렬이란 서로 인접한 두 원소를 비교해가며 정렬하는 알고리즘
def bubblesort(lst):
# 최댓값을 구하는 알고리즘을 len(lst) - 1 만큼 반복한다.
iters = len(lst) - 1
for iter in range(iters):
# 이미 구한 최댓값은 범위에서 제외한다.
wall = iters - iter
for cur in range(wall):
if lst[cur] > lst[cur + 1]:
lst[cur], lst[cur + 1] = lst[cur + 1], lst[cur]
return lst
선택정렬이란 나열되어있는 값 중 가장 작은 값을 찾은 후 1번 인덱스와 교체하고 1번 인덱스를 제외하고 가장 작은 값을 찾아서 2번 인덱스와 교체하는 방식으로 1번부터 5번 인덱스까지 오름차순으로 데이터가 정렬되는 알고리즘
def selectionsort(lst):
iters = len(lst) - 1
for iter in range(iters):
minimun = iter
for cur in range(iter + 1, len(lst)):
if lst[cur] < lst[minimun]:
minimun = cur
if minimun != iter:
lst[minimun], lst[iter] = lst[iter], lst[minimun]
return lst
삽입정렬이란 2번째 인덱스에 있는 값부터 시작해서 왼쪽에 있는 값들과 비교한 후 자료를 뒤로 옮기고 2번째 인덱스에 값을 지정된 자리로 옮기는 알고리즘
def insertionsort(lst):
# 0번째 요소는 이미 정렬되어있으니, 1번째 ~ lst(len)-1 번째를 정렬하면 된다.
for cur in range(1, len(lst)):
# 비교지점이 cur-1 ~ 0(=cur-cur)까지 내려간다.
for delta in range(1, cur + 1):
cmp = cur - delta
if lst[cmp] > lst[cmp + 1]:
lst[cmp], lst[cmp + 1] = lst[cmp + 1], lst[cmp]
else:
break
return lst
def insertionsort_2(lst):
for idx in range(1, len(lst)):
val = lst[idx]
cmp = idx - 1
while lst[cmp] > val and cmp >= 0:
lst[cmp + 1] = lst[cmp]
cmp -= 1
lst[cmp + 1] = val
return lst