선택 정렬
가장 작은 데이터를 골라서 맨 앞의 원소와 바꾸고, 그 다음으로 작은 데이터를 골라서 맨 앞에서 2번째 원소와 바꾼다.
각 원소들을 방문하고, 방문했을 때 작은 원소들을 찾아 탐색해야 하므로(for문 2번) 시간 복잡도는 O(N^2)가 된다.
import time
data = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
start_time_1 = time.time()
data_with_python_sort = sorted(data)
end_time_1 = time.time()
start_time_2 = time.time()
for i in range(len(data) - 1):
for j in range(i + 1, len(data)):
if data[i] > data[j]:
data[i], data[j] = data[j], data[i]
end_time_2 = time.time()
data_with_selection_sort = data.copy()
print("###### python sort ######")
print(data_with_python_sort)
print(end_time_1 - start_time_1)
print()
print("###### selection sort ######")
print(data_with_selection_sort)
print(end_time_2 - start_time_2)
// 캐시 덕분에 2번째 부터는 각각 7e-7 가량 걸리는 시간이 감소되었다.
삽입 정렬
*ex. 6 5 9 7 3
data = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
# for i in range(1, len(data)):
# tmp = i
# for j in range(i - 1, -1, -1):
# if data[tmp] < data[j]:
# data[tmp], data[j] = data[j], data[tmp]
# tmp = j
# else:
# break
for i in range(1, len(data)):
for j in range(i, 0, -1):
if data[j] < data[j - 1]:
data[j], data[j - 1] = data[j - 1], data[j]
else:
break
print(data)
퀵 정렬