Algorithm/알고리즘 스터디(2021.12)
[이코테] 4. 정렬 알고리즘
binaryJournalist
2022. 2. 14. 22:24
반응형
* 선택정렬
- 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾼다 * n
result = []
def selection_sort1(data):
if len(data) > 1:
n = data[0]
m = data[1:]
temp = min(m)
index = 0
if n > min(m):
index = m.index(temp)
m[index] = n
result.append(temp)
else:
result.append(n)
return selection_sort1(m)
else:
result.append(data[0])
def selection_sort2(array):
for i in range(len(array)):
min_index = i
for j in range(i + 1, len(array)):
if array[min_index] > array[j]:
min_index = j
array[i], array[min_index] = array[min_index], array[i]
print(array)
data_list = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
selection_sort1(data_list)
print(result)
selection_sort2(data_list)
* 삽입정렬
- 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입
- 선택 정렬보다 효율적
* study 하면서 피드백받은 건데 insertion_sort1로 쓴 코드는 버블정렬이라고 한다..!
def insertion_sort1(data):
for i in range(len(data)):
for j in range(i + 1, len(data)):
if data[i] > data[j]:
# temp = data[j]
# data[j] = data[i]
# data[i] = temp
data[i], data[j] = data[j], data[i]
print(data)
def insertion_sort2(array):
for i in range(1, len(array)):
for j in range(i, 0, -1):
if array[j] < array[j - 1]:
array[j], array[j - 1] = array[j - 1], array[j]
else:
break
print(array)
data_list = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
insertion_sort1(data_list)
data_list = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
insertion_sort2(data_list)
* 퀵정렬
def quick_sort1(data, start, end):
if (start >= end): return
pivot = start
left = start + 1
right = end
while left <= right:
while left <= end and data[left] <= data[pivot]:
left += 1
while right > start and data[right] >= data[pivot]:
right -= 1
if left > right:
data[right], data[pivot] = data[pivot], data[right]
else:
data[left], data[right] = data[right], data[left]
quick_sort1(data, start, right - 1)
quick_sort1(data, right + 1, end)
def quick_sort2(data):
if len(data) > 1:
pivot = data[0]
tail = data[1:]
left = [x for x in tail if x <= pivot]
right = [x for x in tail if x > pivot]
return quick_sort2(left) + [pivot] + quick_sort2(right)
else:
return data
data_list = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
quick_sort1(data_list, 0, len(data_list) - 1)
print(data_list)
data_list = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
print(quick_sort2(data_list))
반응형