λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μ•Œκ³ λ¦¬μ¦˜πŸ”

[μ•Œκ³ λ¦¬μ¦˜] 선택정렬 (SelectionSort)

선택정렬은 λͺ¨λ“  λ ˆμ½”λ“œκ°€ keyκ°’μœΌλ‘œ ν‘œν˜„λ˜μ–΄, ν•œ μ›μ†Œμ™€ λ‚˜λ¨Έμ§€ λͺ¨λ“  μ›μ†Œλ₯Ό λΉ„κ΅ν•˜λŠ” 정렬이닀.

void SelectionSort(int A[], int n){
    int i, j,MinIndex;
    for(i=0;i<n-1;i++){
        MinIndex =i;
        for(j=Minindex +1;j<n;j++){
            if (A[MinIndex]>A[j]){
                MinIndex = j;
            }
            if (MinIndex != i){
                Swap(&A[i],&A[MinIndex])
            }
        }
    }
}
  • i번째 λ‹¨κ³„μ—μ„œ 항상 n-1회 λΉ„κ΅μˆ˜ν–‰ => λ³΅μž‘λ„λŠ” μž…λ ₯자료 μˆœμ„œμ™€ λ¬΄κ΄€ν•˜λ‹€.
  • ν‰κ· μ‹œκ°„ λ³΅μž‘λ„=O(n^2) 

  • μ΅œμ•…μ‹œκ°„ λ³΅μž‘λ„=O(n^2)
    • μ„ νƒμ •λ ¬μ˜ 경우 λ°μ΄ν„°μ˜ λ‚΄μš”γ…›γ…‡κ³Ό 관계없이 항상 λ§ˆμ§€λ§‰ λ‹¨κ³„κΉŒμ§€ λͺ¨λ“  비ꡐ가 이루어지기 λ•Œλ¬Έμ— 평균 μ‹œκ°„λ³΅μž‘λ„ == μ΅œμ•…μ‹œκ°„λ³΅μž‘λ„μ΄λ‹€. 
  • μ œμžλ¦¬μ„± : 제자리 μ •λ ¬  (μ£Όμ–΄μ§„ λ©”λͺ¨λ¦¬ 곡간 외에 μΆ”κ°€μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” (μƒμˆ˜ν¬κΈ°) λ©”λͺ¨λ¦¬κ°€ μ—†λŠ” μ •λ ¬)
  • μ•ˆμ •μ„± : λΆˆμ•ˆμ •ν•œ μ •λ ¬ (정렬후에 같은 값인 μš”μ†Œμ˜ μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠλŠ” 정렬방식) 
    • μΈμ ‘ν•œ μš”μ†Œμ™€ μŠ€μ™€μΉ­μ΄ μΌλŸ¬λ‚˜λ©΄ λŒ€λΆ€λΆ„ μ•ˆμ •ν•œ 정렬이닀.(λ–¨μ–΄μ ΈμžˆλŠ” μš”μ†Œμ™€ μŠ€μ™€ν•‘μ΄ μΌμ–΄λ‚˜λ©΄ λΆˆμ•ˆμ •ν•  κ°€λŠ₯μ„± 99%)