πŸ“—
JunegLee's TIL
  • TIL
  • python
    • class
    • String Basic
    • regularExpression
    • String function
    • Generator
    • String format
    • getset
    • module
    • while
    • numpy
    • print()
    • matplotlib
    • for
    • Boolean
    • tuple
    • package
    • input(variable)
    • list
    • if
    • file
    • type()
    • pandas
    • function
    • dictionary
    • ꡬ문 였λ₯˜μ™€ μ˜ˆμ™Έ
    • builtinFunction
    • Constructor
  • algorithm
    • sort
      • mergeSort
      • insertionSort
      • bubbleSort
      • heapSort
      • quickSort
      • selectionSort
    • recursion
    • Greedy
    • DepthFirstSearch
    • basic
      • DataStructure
    • hash
    • BreadthFirstSearch
  • tensorflow
    • keras
      • layers
        • Flatten
        • Flatten
        • Dense
        • Dense
        • Conv2D
        • Conv2D
    • tensorflow1x
    • tensorflow2x
  • DB
    • setting
    • join
    • subQuery
    • overview
  • deep-learning
    • neuralNetwork
    • perceptron
    • neuralNetworkLearning
    • convolution neural network
    • Gradient Descent
    • Linear Regression
    • backPropagation
    • logistic regression
    • overview
  • textPreprocessing
    • overview
  • java
    • basics
      • generic
      • Variable
      • String
    • theory
      • Object Oriented Programing
  • NLP
    • Embedding
    • Natural Language Processing
Powered by GitBook
On this page
  • selectionSort
  • 선택 μ •λ ¬ (SelectSort)
  • μ •λ ¬ 방법

Was this helpful?

  1. algorithm
  2. sort

selectionSort

PreviousquickSortNextrecursion

Last updated 3 years ago

Was this helpful?

selectionSort

선택 μ •λ ¬ (SelectSort)

: κ°€μž₯ μž‘μ€ 것을 μ„ νƒν•΄μ„œ κ³„μ†ν•΄μ„œ 제일 μ•žμœΌλ‘œ λ³΄λ‚΄λŠ” μ•Œκ³ λ¦¬μ¦˜

  • κ°€μž₯ μ›μ‹œμ μ΄κ³  기초적인 방법 쀑 ν•˜λ‚˜

  • λ°μ΄ν„°μ˜ κ°―μˆ˜κ°€ N개일 λ•Œ 총 λͺ‡λ²ˆμ˜ 비ꡐ 연산을 ν•΄μ•Ό λ˜λŠ”μ§€ μ•Œμ•„μ•Ό ν•œλ‹€.

  • 선택 정렬은 λŒ€λž΅ N * (N+1)/2 번 κ°€λŸ‰μ˜ 연산을 μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€.

  • 이λ₯Ό μ»΄ν“¨ν„°μ—μ„œλŠ” κ°€μž₯ 큰 차수인 N^2만 보고 O(N^2)이라고 ν‘œν˜„ν•œλ‹€. 즉, 선택 μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(N^2)이닀

μ •λ ¬ 방법

  • μœ„μ— λ³΄λŠ” κ·Έλ¦Όκ³Ό 같이 step μ—μ„œλŠ” μˆœμ„œλŒ€λ‘œ λΉ„κ΅ν•˜λ©° index 0의 값을 끝에 κ°’κΉŒμ§€ λΉ„κ΅ν•œλ‹€

  • 각각의 step을 κ±°μΉ˜λ©΄μ„œ μˆ˜ν–‰ν•˜λ©΄μ„œ μ΅œμ†Ÿκ°’μ„ μ°Ύμ•„μ„œ μœ„μΉ˜λ₯Ό λ°”κΏ”μ€€λ‹€

  • N개의 μ›μ†Œμ— λŒ€ν•΄μ„œλŠ” N-1λ²ˆμ„ λΉ„κ΅ν•˜κΈ° λΉ„κ΅ν•œλ‹€

public class SelectionSort {
    public static void main(String[] args) {
        int i, j, temp;
        int[] arr = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9};

        for(i = 0; i < arr.length-1; i++) {
            for (j = i+1; j < arr.length ; j++) {
                if (arr[i] > arr[j]) {
                    temp = arr[i]; // κ°€μž₯ μ•žμ— μžˆλŠ” κ°’μœΌλ‘œ μœ„μΉ˜
                    arr[i] = arr[j]; // κ°€μž₯ μ•žμ— μžˆλŠ” 값을 μ΅œμ†Œκ°’μ„ μœ„μΉ˜
                    arr[j] = temp;
                }
            }
            // swap (κ°€μž₯ μ•žμ— μžˆλŠ” κ°’κ³Ό μ΅œμ†Œκ°’μ„ λ³€κ²½)
        }
        for (i =0  ; i < arr.length; i++) {
            System.out.printf("%d ", arr[i]);
        }
    }
}
def selectionSort(a):

    n = len(a)
    for i in range(0, n - 1):
        min_idx = i
        for j in range(i + 1, n):
            if a[j] < a[min_idx]:
                min_idx = j
        a[i], a[min_idx] = a[min_idx], a[i] # swap
        print(a)     # μ •λ ¬ κ³Όμ • 좜λ ₯ν•˜κΈ°

d = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9]
selectionSort(d)
print(d)
selectionSort