Skip to content

Latest commit

Β 

History

History
104 lines (86 loc) Β· 3.88 KB

File metadata and controls

104 lines (86 loc) Β· 3.88 KB

μ •λ ¬

  • Selection Sort (선택 μ •λ ¬)
  • Bubble Sort (버블 μ •λ ¬)
  • Insertion Sort (μ‚½μž… μ •λ ¬)
  • Merge Sort (병합 μ •λ ¬)
  • Quick Sort (퀡 μ •λ ¬)

Selection Sort (선택 μ •λ ¬)

  1. κ°€μž₯ μž‘μ€ 값을 μ°Ύμ•„ 0 μœ„μΉ˜μ— λ†“μŠ΅λ‹ˆλ‹€.
  2. κ·Έ λ‹€μŒ μž‘μ€ 값을 μ°Ύμ•„ 1 μœ„μΉ˜μ— λ†“μŠ΅λ‹ˆλ‹€.
  3. κ·Έ λ‹€μŒ μž‘μ€ 값을 μ°Ύμ•„ 2 μœ„μΉ˜μ— λ†“μŠ΅λ‹ˆλ‹€.
for (int i = 0; i < a.length - 1; ++i) {
    // λ°°μ—΄ a의 iλΆ€ν„° λκΉŒμ§€ μ΅œμ†Œκ°’μ„ μ°ΎμŠ΅λ‹ˆλ‹€.
    // μ΅œμ†Œκ°’κ³Ό i μœ„μΉ˜μ˜ 값을 μ„œλ‘œ swap ν•©λ‹ˆλ‹€.
}
  • SelectionSort Code

    λ§ˆμ§€λ§‰ λ‹¨κ³„μ—μ„œλŠ” 남은 값이 1κ°œμž…λ‹ˆλ‹€.
    μ΄λ•Œ μ΅œμ†Œκ°’μ„ μ°ΎλŠ” κ²ƒμ˜ μ˜λ―Έκ°€ μ—†μœΌλ―€λ‘œ i < a.length - 1μž…λ‹ˆλ‹€.
    μ‹œκ°„ λ³΅μž‘λ„: O(n^2)
    곡간 λ³΅μž‘λ„: O(n)


Bubble Sort (버블 μ •λ ¬)

(1) 0 ~ (i - 1) κΉŒμ§€, 두 쌍의 값을 λΉ„κ΅ν•˜μ—¬ μ™Όμͺ½ 값이 크면 μ„œλ‘œ μœ„μΉ˜λ₯Ό λ°”κΏ‰λ‹ˆλ‹€.
(2) (1)번 단계λ₯Ό 거치면 0 ~ i κΉŒμ§€μ˜ μ΅œλŒ€κ°’μ΄ i μœ„μΉ˜μ— 있게 λ©λ‹ˆλ‹€.
(3) 0 ~ (i - 2) κΉŒμ§€, 두 쌍의 값을 λΉ„κ΅ν•˜μ—¬ μ™Όμͺ½ 값이 크면 μ„œλ‘œ μœ„μΉ˜λ₯Ό λ°”κΏ‰λ‹ˆλ‹€.
(4) (3)번 단계λ₯Ό 거치면 0 ~ (i - 1) κΉŒμ§€μ˜ μ΅œλŒ€ 값이 (i - 1) μœ„μΉ˜μ— 있게 λ©λ‹ˆλ‹€.

for (int i = a.length - 1; i >= 1; --i) {
    for (int j = 0; j < i; ++j) {
        if (a[j] > a[j+1]) {
            swap(a, j, j+1);
        }
    }
}
  • BubbleSort Code

    μ‹œκ°„ λ³΅μž‘λ„: O(n^2)
    곡간 λ³΅μž‘λ„: O(n)


Insertion Sort (μ‚½μž… μ •λ ¬)

  • μ‚½μž… 정렬은 두 번째 μΈλ±μŠ€λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€.
for (int i = 1; i < a.length; ++i) {
    int value = a[i];
    
    // a λ°°μ—΄μ˜ 0 μ—μ„œ (i - 1) μ‚¬μ΄μ—μ„œ
    // value 보닀 큰 값듀을 λ’€λ‘œ ν•œ μΉΈμ”© μ΄λ™ν•˜κ³ , κ·Έ κ°’λ“€ μ•žμ— value λ₯Ό λ„£μŠ΅λ‹ˆλ‹€.
}
  • InsertionSort Code

    μ‹œκ°„ λ³΅μž‘λ„: O(n^2)
    곡간 λ³΅μž‘λ„: O(n)


MergeSort (병합 μ •λ ¬)

  • MergeSort Code

    merge λ©”μ†Œλ“œμ˜ μˆ˜ν–‰ μ‹œκ°„μ€ O(n)μž…λ‹ˆλ‹€.
    mergeSort λ©”μ†Œλ“œλŠ” 배열을 1/2둜 λ‚˜λˆ„κ³ , λ‚˜λ‰œ λ°°μ—΄ 각각에 λŒ€ν•΄ mergeSort λ₯Ό μž¬κ·€ ν˜ΈμΆœν•©λ‹ˆλ‹€.
    λ”°λΌμ„œ μž¬κ·€ 호좜 νšŸμˆ˜λŠ” logN μž…λ‹ˆλ‹€.
    κ·ΈλŸ¬λ―€λ‘œ mergeSort λ©”μ†Œλ“œμ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(Nlog N)μž…λ‹ˆλ‹€.
    κ³΅κ°„λ³΅μž‘λ„: O(n)


Quick Sort (퀡 μ •λ ¬)

QuickSort

  • QuickSort Code

    퀡 μ •λ ¬μ˜ partition λ©”μ†Œλ“œμ˜ μˆ˜ν–‰ μ‹œκ°„μ€ O(n)μž…λ‹ˆλ‹€.
    quickSort λ©”μ†Œλ“œμ˜ μž¬κ·€ 호좜 νšŸμˆ˜λŠ” λŒ€λž΅ O(log N)μž…λ‹ˆλ‹€.
    λ”°λΌμ„œ, quickSort λ©”μ†Œλ“œμ˜ μˆ˜ν–‰ μ‹œκ°„μ€ O(Nlog N)μž…λ‹ˆλ‹€.

Best Case

  • partition λ©”μ†Œλ“œκ°€ 배열을 μ •ν™•νžˆ 1/2둜 λ‚˜λˆˆλ‹€λ©΄ μž¬κ·€ 호좜 νšŸμˆ˜λŠ” log N 이고,
  • quickSort λ©”μ†Œλ“œμ˜ μˆ˜ν–‰ μ‹œκ°„μ€ O(Nlog N) μž…λ‹ˆλ‹€.

Worst Case

  • partition λ©”μ†Œλ“œκ°€ 배열을 0 : n-1 크기둜 λ‚˜λˆˆλ‹€λ©΄ μž¬κ·€ 호좜 νšŸμˆ˜λŠ” n μž…λ‹ˆλ‹€.

    μž¬κ·€ ν˜ΈμΆœμ—μ„œ 기쀀값은 μ œμ™Έλ˜κΈ° λ•Œλ¬Έμ— 0 : n 이 μ•„λ‹ˆλΌ 0 : n-1 μž…λ‹ˆλ‹€.

  • quickSort λ©”μ†Œλ“œμ˜ worst case μˆ˜ν–‰ μ‹œκ°„μ€ O(N^2) μž…λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬ 곡간

  • quickSort, partition λ©”μ†Œλ“œκ°€ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ 곡간은 O(1) μž…λ‹ˆλ‹€.

Quick Sort 와 Merge Sort 비ꡐ

  • 병합 μ •λ ¬

    μˆ˜ν–‰ μ‹œκ°„μ€ μ–Έμ œλ‚˜ O(Nlog N) μž…λ‹ˆλ‹€.
    λ©”λͺ¨λ¦¬ μš”κ΅¬λŸ‰μ€ μ–Έμ œλ‚˜ O(N) μž…λ‹ˆλ‹€.

  • 퀡 μ •λ ¬

    μˆ˜ν–‰ μ‹œκ°„ 평균은 O(Nlog N) μ΄μ§€λ§Œ, μ΅œμ•…μ˜ 경우 O(N^2) μž…λ‹ˆλ‹€.
    κ·Έλ ‡μ§€λ§Œ μ΅œμ•…μ˜ κ²½μš°λŠ” 극히 λ“œλ­…λ‹ˆλ‹€.
    퀡 μ •λ ¬μ˜ λ©”λͺ¨λ¦¬ μš”κ΅¬λŸ‰μ€ O(1) μž…λ‹ˆλ‹€.
    μœ„μ™€ 같은 μž₯단점 λ•Œλ¬Έμ—, μ‹€λ¬΄μ—μ„œλŠ” 주둜 퀡 정렬을 μ‚¬μš©ν•©λ‹ˆλ‹€.