본문 바로가기
알고리즘

정렬(sort) 알고리즘 정리-파이썬

by 가오가이거 2020. 12. 13.
def sel_sort(a): #선택정렬
    n = len(a)
    for i in range(0, n - 1):
        min_idx = i
        for j in range(i + 1, n):
            if a[j] < a[min_idx]:
                min_idx = j
        a[i], a[min_idx] = a[min_idx], a[i]
        # print(a)     # 정렬 과정 출력하기
        

d = [2, 1, 5, 4, 3]
sel_sort(d)
print(d)


#select sort
for i in range(0, len(n)-1): #i: 정렬할 위치
    min=i                   #min: 최소값의 위치. 초기값으로 i값 할당
    for j in range(i+1, len(n)):    #j: 최소값을 찾기 위해 한칸씩 위치 이동할 인덱스로 사용
        if n[min] > n[j]:           #min 위치의 값, 즉 최소값보다 더 작은 값을 만나면(j번째 방에서)
            min = j                 #최소값의 위치를 j로 변경. 이 동작을 j가 리스트 끝까지 도달할때까지 반복
    if min != i:                #60번줄에서 min에 i 값을 할당했기 때문에 min이 이동하지 않았다면 i에 최소값이 있는 경우
        tmp = n[min]            #위 경우에는 자리 바꿀 필요없음
        n[min] = n[i]           #그런데 min과 i가 같지 않다면 min이 최소값 있는 위치로 이동한 것이고 그 최소값이 i위치의
        n[i] = tmp              #값으로 들어가야 함. 그러므로 min과 i가 같지 않으면 두 위치의 값을 swap

 

 

 

def ins_sort2(arr): #삽입정렬
    for end in range(1, len(arr)):
        i = end
        while i > 0 and arr[i - 1] > arr[i]:
            arr[i], arr[i - 1] = arr[i - 1], arr[i]
            i -= 1

d = [2, 1, 5, 4, 3]
ins_sort2(d)
print(d)


#insert sort
for i in range(1, len(n)): #i:자기 자리 찾을 값의 위치
    tmp=n[i]               #i위치의 값이 지워지지 않게 tmp 옮겨놓음
    j=i-1               #j: i의 앞 위치로 i값의 위치를 찾기위해 비교할 대상의 위치
    while j>=0 and n[j]>tmp:
        n[j+1]=n[j] #j위치의 값을 뒤로 한칸 이동
        j-=1        #j를 한칸 앞으로 이동
    j+=1
    n[j]=tmp

 

 

 

def bubble_sort(n): #거품정렬(bubble sort)
    for i in range(0, len(n)-1):
        for j in range(0, len(n)-1-i):
            if n[j]>n[j+1]:
                tmp = n[j]
                n[j] = n[j+1]
                n[j+1] =tmp


n = [8, 3, 6, 10, 9, 1, 7, 2, 4, 5]
print(n)
bubble_sort(n)
print(n)

 

'알고리즘' 카테고리의 다른 글

1이 될때까지.  (0) 2022.07.02
DFS / BFS  (0) 2022.06.29
피보나치 수열 구하기-파이썬  (0) 2020.12.13
팩토리얼 구하기-파이썬  (0) 2020.12.13
이진 탐색(search) 알고리즘 정리-파이썬  (0) 2020.12.13