Sorting: Quick Sort
# Implementation of QuickSort
def quickSort(arr: list[int], s: int, e: int) -> list[int]:
if e - s + 1 <= 1:
return arr
pivot = arr[e]
left = s # pointer for left side
# Partition: elements smaller than pivot on left side
for i in range(s, e):
if arr[i] < pivot:
tmp = arr[left]
arr[left] = arr[i]
arr[i] = tmp
left += 1
# Move pivot in-between left & right sides
arr[e] = arr[left]
arr[left] = pivot
# Quick sort left side
quickSort(arr, s, left - 1)
# Quick sort right side
quickSort(arr, left + 1, e)
return arr
# Definition for a pair.
# class Pair:
# def __init__(self, key: int, value: str):
# self.key = key
# self.value = value
class Solution:
def quickSort(self, pairs: List[Pair]) -> List[Pair]:
def quickHelper(s, e):
if e-s+1 <=1:
return pairs
pivot = pairs[e]
left = s
for i in range(s, e):
if pairs[i].key < pivot.key:
pairs[i], pairs[left] = pairs[left], pairs[i]
left +=1
pairs[e], pairs[left] = pairs[left], pairs[e]
quickHelper(s, left-1)
quickHelper(left+1, e)
quickHelper(0, len(pairs)-1)
return pairs
Time: O(1)
https://youtu.be/H7CNZujkk0k?si=V0lkIbDbFf1BjRTH
'Coding Test > 알고리즘 이론' 카테고리의 다른 글
DP: 0 / 1 Knapsack 이론 (0) | 2025.02.05 |
---|---|
Sorting: Bucket Sort (0) | 2025.02.04 |
Sorting: Merge Sort (0) | 2025.02.03 |
Sorting: Insertion Sort (0) | 2025.02.03 |
BIT 연산 Bit Manipulation (0) | 2025.01.30 |