가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 2번째 데이터와 바꾸는 정렬
특정한 리스트에서 가장 작은 데이터를 찾을 때 유리하다.
array = [8,4,6,2,9,1,3,7,5]
def selection_sort(array):
n = len(array)
# 0~(n-1)번 index에 들어갈 수 찾기
for i in range(n):
min_index = i
# i 이후 index의 수 중 가장 작은 수의 index를 min_index에 저장
for j in range(i + 1, n):
# 여기 부호만 바꾸면 내림차순 정렬도 가능
if array[j] < array[min_index]:
min_index = j
# i index와 가장 작은 수의 위치 switch
array[i], array[min_index] = array[min_index], array[i]
selection_sort(array)
print(array) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
현재 위치에서 그 앞 index 배열들을 비교해 자신이 들어갈 위치를 찾아 그 위치에 삽입.
array2 = [8,4,6,2,9,1,3,7,5]
def insertion_sort(array):
for i in range(1, len(array)):
for j in range(i, 0, - 1):
if array[j - 1] > array[j]:
array[j - 1], array[j] = array[j], array[j - 1]
else: break
insertion_sort(array2)
print("삽입정렬:", array2)
선택 정렬의 변형이다. (2개씩 비교해 작은것을 앞으로)
def bubble_sort(a):
n=len(a)
for i in range(n):
# n-i-1 위치: 0 ~ (n-i-1)에서 가장 큰 수가 배치
for j in range(n-i-1):
if a[j] > a[j+1]: # 2개씩 비교해 작은것을 앞으로
a[j], a[j+1] =a[j+1], a[j]
d=[2, 4, 5, 1, 3]
bubble_sort(d)
print(d) # [1, 2, 3, 4, 5]