2024년 7월 25일 (목)
Leetcode daily problem
https://leetcode.com/problems/sort-an-array/?envType=daily-question&envId=2024-07-25
주어진 정수 배열을 오름차순으로 정렬하는 문제로, 빌트인 정렬 함수를 사용하지 않고 시간복잡도 𝑂(𝑛log𝑛)를 유지하고 가능한 작은 공간 복잡성을 유지해야 한다.
Heap Sort
주어진 배열을 정렬하기 위해서는 다양한 정렬 알고리즘을 사용할 수 있는데, 몇 가지 일반적인 정렬 알고리즘을 살펴보면
[1] 퀵 정렬(Quick Sort)
[2] 병합 정렬(Merge Sort)
[3] Heap 정렬(heap sort)
[4] 버블 정렬(Buble Sort)
[5] 삽입 정렬(Insertion Sort)
[6] 선택 정렬(Selection Sort)
: 시간 복잡도가 built-in 함수를 사용하지 않아도 O(nlogn)이면서 공간 복잡도를 O(1)으로 쓰는 힙정렬을 사용해본다.
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
def heapify(arr, n, i):
largest = i
left = 2*i+1
right = 2*i+2
if left < n and arr[largest] < arr[left]:
largest = left
if right < n and arr[largest] < arr[right]:
largest = right
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
def heap_sort(arr):
n = len(arr)
for i in range(n // 2 - 1, -1, -1):
heapify(arr, n, i)
for i in range(n - 1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
heap_sort(nums)
return nums
시간 복잡도
시간복잡도는 O(nlogn)
공간 복잡도
공간복잡도는 O(1) 이다.