HeYStRanGeR
article thumbnail

(23.05.14)

정렬 알고리즘 정리!!

https://github.com/gompaang/algorithm_python

 

GitHub - gompaang/algorithm_python

Contribute to gompaang/algorithm_python development by creating an account on GitHub.

github.com


1.  

2. selection sort : 선택 정렬

1. 가장 작은 수를 선택하여 맨 앞의 수와 자리를 바꾼다.

2. 그 다음으로 가장 작은 수를 선택하여 맨 앞에서 두번째 수와 자리를 바꾼다.

3. 위의 과정을 반복한다. 

 

<python />
def selection_sort(array): for i in range(len(array)): min_index = i for j in range(i+1, len(array)): if array[j] < array[min_index]: min_index = j array[i], array[min_index] = array[min_index], array[i] return array array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] print(selection_sort(array))

 


 

3. insertion sort : 삽입 정렬

1. 가장 앞의 원소는 정렬되어있다고 생각하여 앞에서 두번째 원소부터 시작한다.

2. 앞의 정렬된 원소들과 비교하여 적절한 자리에 삽입한다.

3. 그 다음 원소들도 같은 과정을 통해 적절한 자리에 삽입한다.

 

필요할 때에만 위치를 바꾸기 때문에 "데이터가 거의 정렬되어 있을 때" 효율적이다.

 

<python />
def insertion_sort(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 return array array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] print(insertion_sort(array))

 

 

 

 


 

4. Quick sort : 퀵 정렬

1. pivot을 정한다.

2. 왼쪽부터는 pivot 보다 큰 원소, 오른쪽부터는 pivot보다 작은 원소를 고른다.

3. 두 원소의 자리를 바꿔준다. 단, 두 원소가 엇갈릴 경우 pivot보다 작은 원소와 pivot을 바꾼다.

4. 위의 과정을 반복한다.

<python />
def quick_sort(array, start, end): if start >= end: return array pivot = start left = start + 1 right = end while left <= right: while left <= end and array[left] <= array[pivot]: left += 1 while right > start and array[right] >= array[pivot]: right -= 1 if left > right: array[pivot], array[right] = array[right], array[pivot] else: array[left], array[right] = array[right], array[left] quick_sort(array, start, right-1) quick_sort(array, right+1, end) array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] quick_sort(array, 0, len(array)-1) print(array)

 

<python />
# quick sort (python) def quick_sort_python(array): if len(array) <= 1: return array pivot = array[0] data = array[1:] left = [x for x in data if x <= pivot] right = [x for x in data if x > pivot] return quick_sort_python(left) + [pivot] + quick_sort_python(right) array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] print(quick_sort_python(array))

 

quick sort는 데이터가 정렬되어 있고, pivot이 가장 왼쪽인 경우에 매우 느리다.

(insertion sort가 데이터가 정렬되어있을 때 빠르다는 것과는 반대인 것이다.)

 

 

 

선택정렬, 삽입정렬, 퀵정렬의 시간 복잡도 비교

 

 

 

 

 

 

 

참고자료: 이것이 코딩 테스트다 (나동빈)

https://github.com/ndb796/python-for-coding-test

728x90
profile

HeYStRanGeR

@HeYStRanGeR

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!