선택정렬
- 남아있는 데이터의 전체를 검색하여 가장 작은 데이터를 맨앞으로 보내면 된다.
- 시간복잡도는
O(N^2)
이다.
ARRAY = [1, 4, 2, 3, 7, 8, 5, 9, 1, 6]
def sort(array):
for startIndex in range(len(array)):
minIndex = startIndex
for i in range(startIndex, len(array)):
if array[minIndex] > array[i]:
minIndex = i
array[minIndex], array[startIndex] = array[startIndex], array[minIndex]
return array
print(sort(ARRAY))
삽입정렬
- 처리되지 않는 데이터를 하나씩 골라 적절한 위치에 삽입합니다
- 선택보다 효율이 좋지만 수현이 조금 더 어렵다
- 앞의 데이터들은 '정렬이 되어있다' 라고 판단하고, 두번째 데이터부터 기준이 되는 앞의 데이터들의 앞으로 들어가거나 뒤로 들어가거나 두가지 경우만 존재한다.
- 시간복잡도는 O(N^2)입니다.
- 다만, 선택정렬과 다른점은 현재의 데이터가 거의 정렬되어 있는 상태라면, 최선의 경우 O(N)을 가집니다.
- 이유는, 항상 2번째 for문에서 break가 실행될것이기 때문입니다
ARRAY = [1, 4, 2, 3, 7, 8, 5, 9, 1, 6]
def sort(array):
for i in range(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
print(sort(ARRAY))
- 즉, i를 기점으로 왼쪽이 정렬하는 영역, 오른쪽이 비 정렬 영역으로 다룹니다
- i 한개씩 증가시킵니다.
- j는 i를 시작으로 0이될때까지 반복을 합니다. 이 뜻은, i의 정렬되어 있는 영역을 역순으로 확인하는것이라고 생각하면됩니다.
- j를 기준으로, 자신의 왼쪽에 있는게 자신보다 크다면, 위치를 바꿉니다. 이것은 원래의 위치를 밀어내고 끼워넣는것으로 이미지 하시면 좋습니다.
- 이것을 반복하다 어느순간, 자신이 왼쪽의 값보다 크다면, 바로 그곳이 j의 값이 있을곳이기 때문에 break로 빠져나옵니다.
'IT,프로그래밍 > 알고리즘' 카테고리의 다른 글
파이썬(python) 코테 연습용 파일 읽는방법 (0) | 2021.11.30 |
---|---|
프로그래머스[lv.3] [DFS/BFS] - 여행경로 (0) | 2021.05.03 |
프로그래머스[큐/스택][lv.2] - 기능개발 (0) | 2021.04.25 |
[자료구조] 큐(Queue)란? (0) | 2021.04.07 |
프로그래머스[lv.2] - 스킬트리(Summer/Winter Coding(~2018)) (0) | 2021.03.01 |