In [1]:
"""
선택 정렬은 입력이 정렬이 되던 안되있던 항상 일정한 시간 복잡도를 같는다.
"""
def min_val(seq):
idx = 0
for i in range(1,len(seq)):
if seq[i] < seq[idx]:
idx = i
return idx
min_val([3,4,2,1])
Out[1]:
In [2]:
def swap(seq, s, t):
temp = seq[s]
seq[s] = seq[t]
seq[t] = temp
In [3]:
def selection_sort(seq):
if len(seq) < 1:
return seq
m = min_val(seq)
swap(seq,0,m)
return [seq[0]] + selection_sort(seq[1:])
In [4]:
print(selection_sort([3,2,1]))
In [5]:
li = [1,2,3]
In [6]:
li.pop(1)
Out[6]:
In [7]:
li
Out[7]:
In [8]:
max(li)
Out[8]:
In [9]:
min([2,3,1])
Out[9]:
In [12]:
# 아래것은 시간 복잡도가 o(n**3) 이 나오는 것 같음 pop때 n번 움직일 수 있음
def selection_sort2(seq):
temp = []
while(len(seq)>0):
temp.append(seq.pop(min_val(seq)))
return temp
In [17]:
li = [4,2,1]
In [18]:
print(selection_sort2(li))
In [31]:
x = [5,34,6,1,3]
In [32]:
import operator
In [33]:
min_index, min_value = min(enumerate(x), key=operator.itemgetter(1))
In [34]:
print(min(enumerate(x), key=operator.itemgetter(1)))
In [ ]: