Skip to content

Latest commit

ย 

History

History
86 lines (66 loc) ยท 3.06 KB

Merge_Sort.md

File metadata and controls

86 lines (66 loc) ยท 3.06 KB

๋ณ‘ํ•ฉ ์ •๋ ฌ (Merge Sort)

๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ์–ด๋– ํ•œ ๋ฌธ์ œ๋ฅผ ์šฐ์„  ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ๊ณ  ๋‚œ ํ›„ ๋‹ค์‹œ ์กฐํ•ฉํ•˜์—ฌ ์›๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ถ„ํ• ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ •๋ ฌ ๊ณผ์ •

  1. ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ถ€๋ถ„๋ฐฐ์—ด๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
  2. ํ•ด๋‹น ๋ถ€๋ถ„๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด ์•„๋‹ˆ๋ผ๋ฉด 1๋ฒˆ ๊ณผ์ •์„ ๋˜ํ’€์ดํ•ฉ๋‹ˆ๋‹ค.
  3. ์ธ์ ‘ํ•œ ๋ถ€๋ถ„๋ฐฐ์—ด๋ผ๋ฆฌ ์ •๋ ฌํ•˜๋ฉฐ ํ•ฉ์นฉ๋‹ˆ๋‹ค.

GIF๋กœ ์ดํ•ดํ•˜๊ธฐ

แ„‡แ…งแ†ผแ„’แ…กแ†ธแ„Œแ…ฅแ†ผแ„…แ…งแ†ฏ

ํŠน์ง•

  • ๊ณต๊ฐ„ ๋ณต์žก๋„
    • ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ธ์ ‘ํ•œ ๊ฐ’๋“ค ๊ฐ„์— ๊ตํ™˜(swap)์€ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๋‘ ๊ฐœ์˜ ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉํ•  ๋•Œ ๋ณ‘ํ•ฉ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์•„ ๋†“์„ ๋ฐฐ์—ด์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ž…๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์ „๋ฐ˜์ ์ธ ๋ฐ˜๋ณต์˜ ์ˆ˜๋Š” ์ ์  ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— O(logN)์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋ฉฐ, ๊ฐ ํŒจ์Šค์—์„œ ๋ณ‘ํ•ฉํ•  ๋•Œ ๋ชจ๋“  ๊ฐ’๋“ค์„ ๋น„๊ตํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(N) ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ตœ์„ , ํ‰๊ท , ์ตœ์•… ๋ชจ๋‘ O(NlogN)์ž…๋‹ˆ๋‹ค.

์žฅ์ 

  • ์ตœ์„ , ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(NlogN)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๋ถ„ํฌ์— ์˜ํ–ฅ์„ ๋œ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด, ๋งํฌ ์ธ๋ฑ์Šค๋งŒ ๋นˆ๊ฒฝ๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ์˜ ์ด๋™์€ ๋ฌด์‹œ ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ž‘์•„์ง‘๋‹ˆ๋‹ค.
  • ํฌ๊ธฐ๊ฐ€ ํฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ •๋ ฌํ•  ๊ฒฝ์šฐ์— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ํ€ต ์ •๋ ฌ ํฌํ•จ ๋‹ค๋ฅธ ์–ด๋–ค ์ •๋ ฌ ๋ฐฉ๋ฒ•๋ณด๋‹ค ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๋‹จ์ 

  • in place์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์˜ˆ์ œ (Baekjoon)

๋ฐฑ์ค€ - ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ

๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-18 แ„‹แ…ฉแ„’แ…ฎ 6 01 12

ํ’€์ด

์ž…๋ ฅ ๊ฐ’๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
๋ณ‘ํ•ฉ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ(Python)

def merge_sort(arr, first, last):
	if first >= last:
		return
    
	merge_sort(arr, first, (first+last) // 2)
	merge_sort(arr, (first+last) // 2 + 1, last)

	return merge(arr, first, last)

def merge(arr, first, last):
	mid = (first + last) // 2
	i, j = first, mid+1
	temp = []

	while i <= mid and j <= last:
		if arr[i] <= arr[j]:
			temp.append(arr[i])
			i += 1
		else:
			temp.append(arr[j])
			j += 1
	while i <= mid:
		temp.append(arr[i])
		i += 1
	while j <= last:
		temp.append(arr[j])
		j += 1
	for k in range(first, last+1):
		arr[k] = temp[k-first]

	return arr

n = int(input())
numbers = []

for _ in range(n):
    numbers.append(int(input()))

for n in merge_sort(numbers, 0, n - 1):
    print(n)

๋ณ‘ํ•ฉ์ •๋ ฌ ์ •๋ ฌ๊ณผ์ • ์— ๋”ฐ๋ผ ๋ถ„ํ•  - ์ •๋ณต - ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Reference