요약

내용

원리

  • 배열을 절반으로 나누어 각각 정렬한 후 병합하는 분할 정복 알고리즘이다.

시간 복잡도

  • 모두 O(n log n)

장점

  • 안정적이고 ,큰 데이터에 효율적이다.

단점

  • 추가적인 메모리가 필요하여 메모리 사용에 문제가 될 수 있다.

구현체

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)
}

참고