<aside> 👉🏿 문제 링크
</aside>
문제 정리
<aside> 👉🏿 배열이 주어지고, 배열을 정렬하는 문제이다.
파이썬 내장함수를 써서는 안된다.
</aside>
접근 방법
<aside> 👉🏿 상당히 많은 방법으로 풀어 볼 수 있다.
복습 차원에서 제공한 문제인 것 같다.
</aside>
코드 진행
<aside> 👉🏿 총 3가지 방법으로 진행했다.
class BinaryMinHeap:
def __init__(self):
self.items = [None]
def __len__(self):
return len(self.items) - 1
def _percolate_up(self):
cur = len(self)
parent = cur // 2
while parent > 0:
if self.items[cur] < self.items[parent]:
self.items[cur], self.items[parent] = self.items[parent], self.items[cur]
cur = parent
parent = cur // 2
def _percolate_down(self, cur):
smallest = cur
left = 2 * cur
right = 2 * cur + 1
if left <= len(self) and self.items[left] < self.items[smallest]:
smallest = left
if right <= len(self) and self.items[right] < self.items[smallest]:
smallest = right
if smallest != cur:
self.items[cur], self.items[smallest] = self.items[smallest], self.items[cur]
self._percolate_down(smallest)
def insert(self, k):
self.items.append(k)
self._percolate_up()
def extract(self):
if len(self) < 1:
return None
root = self.items[1]
self.items[1] = self.items[-1]
self.items.pop()
self._percolate_down(1)
return root
class Solution:
def merge(self, arr1, arr2):
results = []
i = j = 0
while i < len(arr1) and j < len(arr2):
if arr1[i] < arr2[j]:
results.append(arr1[i])
i += 1
else:
results.append(arr2[j])
j += 1
while i < len(arr1):
results.append(arr1[i])
i += 1
while j < len(arr2):
results.append(arr2[j])
j += 1
return results
def merge_sort(self, nums):
if len(nums) <= 1:
return nums
mid = len(nums) // 2
L = nums[:mid]
R = nums[mid:]
return self.merge(self.merge_sort(L), self.merge_sort(R))
def quick_sort(self, list, start, end):
def partition(part, ps, pe):
pivot = part[pe]
i = ps - 1
for j in range(ps, pe):
if part[j] < pivot:
i += 1
part[j], part[i] = part[i], part[j]
part[i + 1], part[pe] = part[pe], part[i + 1]
return i + 1
if start >= end:
return None
p = partition(list, start, end)
self.quick_sort(list, start, p - 1)
self.quick_sort(list, p + 1, end)
return list
def sortColors(self, nums):
# nums[:] = self.merge_sort(nums)
# nums[:] = self.quick_sort(nums, 0, len(nums) - 1)
heap = BinaryMinHeap()
for num in nums:
heap.insert(num)
nums[:] = [heap.extract() for _ in range(len(nums))]
print(nums)
solution = Solution()
solution.sortColors(nums=[0,1,2])