데이터를 순서대로 나열하는 방법을 의미
Q. 다음과 같이 숫자로 이루어진 배열이 있을 때, 오름차순으로 버블 정렬을 이용해서 정렬하시오.
input = [4, 6, 2, 9, 1]
def bubble_sort(array):
n = len(array)
for i in range(n-1):
for j in range(n-1 -i):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
return
Q. 다음과 같이 숫자로 이루어진 배열이 있을 때, 오름차순으로 선택 정렬을 이용해서 정렬하시오.
input = [4, 6, 2, 9, 1]
def selection_sort(array):
n = len(array)
# 총 도는 횟수
for i in range(n) :
min_data_index = i # 최소값 위치를 맨 앞에 숫자의 위치로 초기화
for j in range(i, n) : # 맨 앞부터 끝까지 비교해서 최솟값의 위치찾는 반복문
if array[j] < array[min_data_index] :
min_data_index = j
array[i], array[min_data_index] = array[min_data_index], array[i] # 최솟값을 자리에 넣어주기
return
def insertion_sort(array):
n = len(array)
for i in range(1, n):
for j in range(i):
if array[i - j - 1] > array[i - j]:
array[i - j - 1], array[i - j] = array[i - j], array[i - j - 1]
else:
break
return
배열의 앞부분과 뒷부분의 두 그룹으로 나누어 각각 정렬한 후 병합하는 작업을 반복
merge
def merge(array1, array2):
array_c = []
array1_index = 0
array2_index = 0
while array1_index < len(array1) and array2_index < len(array2) :
if array1[array1_index] < array2[array2_index] :
array_c.append(array1[array1_index])
array1_index += 1
else :
array_c.append(array2[array2_index])
array2_index += 1
if array1_index == len(array1) :
# array2가 남아있다.
while array2_index < len(array2) :
array_c.append(array2[array2_index])
array2_index += 1
if array2_index == len(array2) :
# array1이 남아있다
while array1_index < len(array1) :
array_c.append(array1[array1_index])
array1_index += 1
return array_c
def merge_sort(array):
# 탈출조건
if len(array) <= 1:
return array
mid = len(array) // 2
left_array = merge_sort(array[:mid])
right_array = merge_sort(array[mid:])
return merge(left_array, right_array)