์ž๋ฃŒ๊ตฌ์กฐ๐Ÿ“— - python ์ •๋ ฌ(sort), ํƒ์ƒ‰(search)

python ๋ฆฌ์ŠคํŠธ์˜ ์ •๋ ฌ

  1. sorted()
    • ๋‚ด์žฅ ํ•จ์ˆ˜(built-in function)
    • ์ •๋ ฌ๋œ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์–ป์–ด๋ƒ„
  2. .sort()
    • ๋ฆฌ์ŠคํŠธ์˜ ๋ฉ”์„œ๋“œ(method)
    • ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•จ
L = [3, 8, 2, 7]
L2 = sorted(L)
#L2 = [2, 3, 7, 8]
#L = [3, 8, 2, 7]

L.sort()
#L =[2, 3, 7, 8]

์ •๋ ฌ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ

reverse=True

  • L2 = sorted(L, reverse = True)
  • L.sort(reverse = True)

๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ

  • ์ •๋ ฌ ์ˆœ์„œ๋Š” ์‚ฌ์ „ ์ˆœ์„œ(์•ŒํŒŒ๋ฒณ ์ˆœ์„œ)๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
  • Q. ๋ฌธ์ž์—ด ๊ธธ์ด ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด?
    -> ์ •๋ ฌ์— ์ด์šฉํ•˜๋Š” ํ‚ค(key)๋ฅผ ์ง€์ •
L = ['abcd', 'xyz', 'spamm']
sorted(L, key = lambda x: len(x))
>>> ['xyz', 'abcd', 'spamm']

์ •๋ ฌ - ํ‚ค๋ฅผ ์ง€์ •ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ˆ

L=[{'name':'John', 'score': 83},
	{'name':'Paul', 'score': 92}]

L.sort(key=lambda x:x['name'])
# -> ๋ ˆ์ฝ”๋“œ๋“ค์„ ์ด๋ฆ„ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ

L.sort(key=lambda x:x['score'], reverse=True)
# -> ๋ ˆ์ฝ”๋“œ๋“ค์„ ์ ์ˆ˜ ๋†’์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ

ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜1 - ์„ ํ˜• ํƒ์ƒ‰(Linear Search)

  • ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„ ์†Œ์š” O(n)
  • ์ตœ์•…์˜ ๊ฒฝ์šฐ: ๋ชจ๋“  ์›์†Œ๋ฅผ ๋‹ค ๋น„๊ตํ•ด ๋ณด์•„์•ผ ํ•œ๋‹ค.
def linear_search(L,x):
    i = 0
    while i < len(L) and L[i] != x:
        i += 1
    if i < len(L):
        return i
    else:
        return -1

ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜2 - ์ด์ง„ ํƒ์ƒ‰(Binary Search)

  • ํƒ์ƒ‰ํ•˜๋ ค๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ ๊ฐ€๋Šฅ
  • ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์„ฑ์งˆ ์ด์šฉ
  • ํ•œ๋ฒˆ ๋น„๊ต๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์ŠคํŠธ ๋ฐ˜์”ฉ ์ค„์ž„(divide & conquer)
    -O(logn)

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ