O(1) < O(log n) < O(n) < O(n*log n) < O(n^2) < O(2^n) < O(n!)
쉬운 설명을 위해 모든 예시는 오름차순 정렬을 사용함.
모든 사진의 출처는 링크로 연결함
def bubbleSort(x): length = len(x)-1 for i in range(length): for j in range(length-i): if x[j] > x[j+1]: # 앞에가 더 크면 Swap x[j], x[j+1] = x[j+1], x[j] return x
def insert_sort(x): for i in range(1, len(x)): j = i - 1 key = x[i] while x[j] > key and j >= 0: #자신보다 크면 순서 바꾸기 x[j+1] = x[j] j = j - 1 x[j+1] = key # 반복문 멈춘 자리에 Insert return x
def selectionSort(x): length = len(x) for i in range(length-1): indexMin = i for j in range(i+1, length): if x[indexMin] > x[j]: indexMin = j #최소값 찾기 x[i], x[indexMin] = x[indexMin], x[i] #맨 앞과 Swap return x
split(data_list): if len(data_list) <= 1: #탈출: 더 자를수 없음 return data_list mid = len(data_list) // 2 #가운데를 기준으로 나눠서 재귀 left = split(data_list[:mid]) right = split(data_list[mid:]) return merge(left, right) #병합
merge(left, right): merged = list() left_i, right_i = 0, 0 while left_i<len(left) and right_i<len(right): if right[right_i] < left[left_i]: #left, right 중 작은 값 하나씩 추가 merged.append(right[right_i]) right_i += 1 else: merged.append(left[left_i]) left_i += 1 #남은 값들 추가 while left_i < len(left): merged.append(left[left_i]) left_point += 1 while right_i < len(right): merged.append(right[right_i]) right_i += 1 return merged
def quicksort(x): if len(x) <= 1: #탈출: 더 자를 수 없음 return x pivot = x[len(x) // 2] #인덱스 기준 중간값을 기준점으로 less = [] more = [] equal = [] for a in x: #모든 값을 기준값과 비교해 3개의 그룹으로 나눔 if a < pivot: less.append(a) elif a > pivot: more.append(a) else: equal.append(a) return quicksort(less) + equal + quicksort(more) #재귀 및 병합
감사합니다.