정렬
데이터를 순서대로 나열하는 방법을 의미합니다.
버블정렬
앞뒤 숫자 비교해서 정렬: 1st 와 2nd, 2nd와 3nd, 3nd와4th 와 비교
input = [10, 4,2]
def bubble_sort(input):
n = len(input)
for loop1 in range(n - 1):
for loop2 in range(n - 1 - loop1):
print(loop2, loop2 + 1, input)
if input[loop2] > input[loop2 + 1]:
input[loop2], input[loop2 + 1] = input[loop2 + 1], input[loop2]
return input
print(bubble_sort(input))
선택정렬
선택해서 정렬. : 가장 작은 숫자를 맨앞자리 를 교체 해서 인덱스를 늘림.
input = [10, 4, 2]
def selection_sort(input):
n = len(input)
for loop1 in range(n - 1):
min_index = loop1
for loop2 in range(n-loop1):
print(min_index + loop2, min_index , input)
if input[min_index] > input[loop1 + loop2]:
min_index = loop1 + loop2
input[loop1], input[min_index] = input[min_index], input[loop1]
return input
print(selection_sort(input)
삽입정렬
항상 정렬된상태를 유지, 첫번째 루프보다 작은 인덱스의 숫자들 비교.
이미 정렬된 숫자중 가장 큰수보다 크면 더이상진행안해도됨.
시간복잡도가. 최선의 경우 N만큼의 시간복잡도. .
input = [10, 4, 2,3,5,7,]
def insertion_sort(input):
n = len(input)
for loop1 in range(n - 1):
for loop2 in range(loop1):
#print(loop1, loop2)
print(loop1-loop2-1 ,loop1-loop2)
if input[loop1-loop2-1] <input[loop1-loop2]:
input[loop1-loop2-1],input[loop1-loop2] =input[loop1-loop2],input[loop1-loop2-1]
else:
break
return input
print(insertion_sort(input))
병합정렬
N/2^k = 1
k = log2N
log2N * O(N) → O(NlogN)
array_a = [1, 2, 3, 5]
array_b = [4, 6, 7, 8]
array = [5, 3, 2, 1, 6, 8, 7, 4]
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:])
print(left_array, right_array)
return merge(left_array, right_array)
def merge(array1, array2):
array_c =[]
index_a = 0
index_b = 0
for i in range(len(array1)+len(array2)):
#print(len(array1)+len(array2),i )
#print(index_a,index_b)
if len(array1) <= index_a:
array_c.append(array2[index_b])
index_b += 1
elif len(array2) <= index_b:
array_c.append(array1[index_a])
index_a += 1
elif array1[index_a] >= array2[index_b]:
array_c.append(array2[index_b])
index_b += 1
else:
array_c.append(array1[index_a])
index_a += 1
return array_c
print(merge(array_a,array_b))
print(merge_sort(array))
퀵정렬
gmlwjd9405.github.io/2018/05/10/algorithm-quick-sort.html
input = [10, 4, 2]
def quick_sort(input):
data_length = len(input)
if data_length <=1:
return input
pivot = input[data_length//2]
min = []
max = []
for num in range(data_length):
if input[num] < pivot:
min.append(input[num])
elif input[num] > pivot:
max.append(input[num])
return quick_sort(min)+[pivot]+ quick_sort(max)
print(quick_sort(input))
'Algorithm' 카테고리의 다른 글
[1028알고리즘 20]Dynamic Programming (0) | 2021.04.10 |
---|---|
[1028알고리즘 19]해쉬 (0) | 2021.04.10 |
[1028알고리즘 17]재귀함수(Recursive function) (0) | 2021.04.10 |
[1028알고리즘 16]이진탐색 vs 순차탐색 (0) | 2021.04.10 |
[1028알고리즘 15]트리, 힙 (0) | 2021.04.10 |