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]:
3

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]))


[1, 2, 3]

In [5]:
li = [1,2,3]

In [6]:
li.pop(1)


Out[6]:
2

In [7]:
li


Out[7]:
[1, 3]

In [8]:
max(li)


Out[8]:
3

In [9]:
min([2,3,1])


Out[9]:
1

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))


[1, 2, 4]

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)))


(3, 1)

In [ ]: