요약
내용
원리
- 배열을 절반으로 나누어 각각 정렬한 후 병합하는 분할 정복 알고리즘이다.
시간 복잡도
장점
단점
- 추가적인 메모리가 필요하여 메모리 사용에 문제가 될 수 있다.
구현체
package main
import "fmt"
func mergeSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
mid := len(arr) / 2
left := mergeSort(arr[:mid])
right := mergeSort(arr[mid:])
return merge(left, right)
}
func merge(left, right []int) []int {
result := []int{}
i, j := 0, 0
// 두 배열을 비교하며 작은 값을 결과 배열에 추가
for i < len(left) && j < len(right) {
if left[i] < right[j] {
result = append(result, left[i])
i++
} else {
result = append(result, right[j])
j++
}
}
result = append(result, left[i:]...)
result = append(result, right[j:]...)
return result
}
func main() {
arr := []int{3, 2, 5, 4, 1}
fmt.Println("Before mergeSort array: ", arr)
sortedArr := mergeSort(arr)
fmt.Println("After mergeSort array: ", sortedArr)
}
참고