TIL 20191211

jakeshin·2019년 12월 14일
0

TIL

목록 보기
6/8

merge sort

mergeSort(divide)

mergeSort(arr, l, r):
	if l<r:
    	m = (l+r)/2
    	mergeSort(arr, l, m)
        mergeSort(arr, m+1, r)
        merge(arr, l, m, r)

merge(conquer)

merge(arr, l, m, r):
	i = l	# 왼쪽 배열의 인덱스 (l ~ m)
    j = m+1	# 오른쪽 배열의 인덱스 ("m+1" ~ r)
    idx = l
    
    while i<=m and j<=r:	# <=인 이유: i는 l~m까지 커버하고, j는 m+1~r까지 커버하기 때문!!
    	if arr[i]<arr[j]:
        	sorted[idx] = arr[i]
          	i++
        else:
        	sorted[idx] = arr[j]
        	j++
        idx++
    
    while i<=m:
    	sorted[idx] = arr[i]
        idx++
        i++
    while j<=r:
    	sorted[idx] = arr[j]
        idx++
        j++

merge sort가 뭔지, 어떤 원리인지는 이미 잘 안다.
그러나,
어떻게 코드를 구성하고 (어떻게 나누고, 합치는가?) 병합 시 부등호에서 등호의 존재 여부, j가 m+1인 이유 등 코딩으로 구현하는 노하우가 부족하다고 느꼈다. 자료구조와 알고리즘의 개념에 대한 이해 또한 무척 중요하지만, 배운 개념을 직접 코드로 구현하고 체화하지 못하면 의미가 없다고 느꼈다.

profile
새싹 개발자🌱

0개의 댓글