당신은 주제를 찾고 있습니까 “선택 정렬 파이썬 – 셀렉션소트 선택정렬 5분만에 이해하기 – Gunny“? 다음 카테고리의 웹사이트 you.cazzette.com 에서 귀하의 모든 질문에 답변해 드립니다: you.cazzette.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 코딩하는거니 이(가) 작성한 기사에는 조회수 15,074회 및 좋아요 225개 개의 좋아요가 있습니다.
Table of Contents
선택 정렬 파이썬 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 셀렉션소트 선택정렬 5분만에 이해하기 – Gunny – 선택 정렬 파이썬 주제에 대한 세부정보를 참조하세요
안녕하세요 거니입니다.
정렬 알고리즘 5분만에 이해하기 두번째 영상, 셀렉션소트 입니다. #거니 #알고리즘 #알고투게더
선택 정렬 파이썬 주제에 대한 자세한 내용은 여기를 참조하세요.
[알고리즘] 선택 정렬 – Selection Sort (Python, Java)
[알고리즘] 선택 정렬 – Selection Sort (Python, Java). 정렬 알고리즘 중에서 가장 직관적이고 쉽게 구현이 가능한 선택 정렬(Selection Sort)에 대해서 알아 …Source: www.daleseo.com
Date Published: 5/20/2021
View: 6036
모두의 알고리즘 with 파이썬: 08 선택 정렬 – 더북(TheBook)
8선택 정렬. ◼︎ 8-1 선택 정렬 과정. 일반적인 선택 정렬은 처리할 대상 범위에서 최솟값을 찾아 그 값과 범위의 맨 앞에 있는 값을 서로 바꾸는 과정을 반복합니다.
Source: thebook.io
Date Published: 11/8/2022
View: 4331
[Python] 선택 정렬(Selection Sort) 사용하기 – 지나가는 이야기
이번에는 여러 정렬 기법 중 선택 정렬(Selection Sort)을 파이썬 코드로 구현해 보겠습니다. 먼저, 선택 정렬은 배열에 있는 값들 중 최솟값을 탐색 …
Source: passing-story.tistory.com
Date Published: 3/12/2022
View: 8175
[알고리즘/Algorithm] 파이썬으로 선택 정렬(Selection Sort) 알아 …
개인적으로 기본 정렬 3개(버블 정렬, 선택 정렬, 삽입 정렬)중 제일 직관적인 정렬 알고리즘이라고 생각이 들었다. 선택 정렬을 파이썬으로 구현하며 …
Source: honggom.tistory.com
Date Published: 8/9/2022
View: 9780
[알고리즘] 선택 정렬에 대해 알아보자! (+Python 구현) – Hey Tech
1. 선택 정렬이란? · 최소 선택 정렬(Min-selection sort): 매번 가장 작은 데이터를 선택하고 데이터 간의 배치를 변경하며 오름차순으로 정렬 · 최대 선택 …
Source: heytech.tistory.com
Date Published: 9/19/2022
View: 6618
[Algorithm] (이코테) 선택 정렬 – 파이썬
[Algorithm] (이코테) 선택 정렬 – 파이썬. 4339 단어 Selection SortAlgorithms이것이 코딩 테스트다 with 파이썬sortingpythonAlgorithms.Source: intrepidgeeks.com
Date Published: 5/30/2021
View: 374
[정렬 알고리즘] 파이썬 선택 정렬 구현 – velog
선택 정렬(Selection Sort). 전개. 주어진 배열에서 최솟값을 찾는다. 그 값을 맨 앞의 값과 교체한다. 맨 처음 위치를 뺀 나머지 배열을 같은 방법 …
Source: velog.io
Date Published: 6/26/2021
View: 2050
Selection Sort – 선택 정렬 – EXCELSIOR – 티스토리
1. 단순 선택법 개념 이해하기 · 2. 단순 선택법 알고리즘 · 3. 단순 선택법을 순서도로 나타내기 · 4. 의사코드로 나타내기 · 5. 파이썬 코드로 구현하기.
Source: excelsior-cjh.tistory.com
Date Published: 2/19/2022
View: 5737
2.4 선택 정렬(Selection Sort) 알고리즘
선택 정렬 알고리즘을 의사코드(pseudo code: 논리적인 수행 흐름을 이해할 수 있게 작성한 코드)는 다음과 같습니다. 선택 정렬(base:컬렉션,n:원소 개수 …
Source: wikidocs.net
Date Published: 4/7/2022
View: 4380
[알고리즘][정렬] ② 삽입 정렬 (Insertion Sort) – Python
이전 글에서는 선택정렬(Selection Sort)에 대해서 알아보았습니다. 선택정렬은 가장 원시적인 방법으로 복잡도가 O(N²)에 해당하여 데이터가 늘어날 …
Source: hyen4110.tistory.com
Date Published: 9/11/2021
View: 3147
주제와 관련된 이미지 선택 정렬 파이썬
주제와 관련된 더 많은 사진을 참조하십시오 셀렉션소트 선택정렬 5분만에 이해하기 – Gunny. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

주제에 대한 기사 평가 선택 정렬 파이썬
- Author: 코딩하는거니
- Views: 조회수 15,074회
- Likes: 좋아요 225개
- Date Published: 2018. 10. 1.
- Video Url link: https://www.youtube.com/watch?v=jtxwQ7ChiII
[알고리즘] 선택 정렬 – Selection Sort (Python, Java)
정렬 알고리즘 중에서 가장 직관적이고 쉽게 구현이 가능한 선택 정렬(Selection Sort)에 대해서 알아보겠습니다.
달레 코딩에서 코딩 테스트/인터뷰 준비에 좀 더 특화된 컨텐츠를 만나보세요! 📝
기본 아이디어
선택 정렬은 알고리즘에 대해 배워본 적이 없는 사람도 쉽게 생각해낼 수 있는 정렬 알고리즘입니다. 왜냐하면 우리가 일상에서 무언가를 크기 순으로 나열할 때 흔히 사용되는 사고 방식이기 때문입니다.
170cm, 180cm, 150cm, 160cm
예를 들어, 위와 같이 키를 알고 있는 네 친구들을 키 순으로 세우려면, 우선 4명의 키를 모두 비교하여 키가 제일 작은 150cm 인 친구를 맨 앞에 세웁니다.
150cm (4명 중 제일 작음)
키가 150cm 인 친구는 맨 앞에 세웠으니, 이제 나머지 세 친구의 키를 비교하여 키가 제일 작은 160cm 인 친구를 그 다음에 세웁니다.
150cm, 160cm (150cm 빼고 남은 3명 중 제일 작음)
이제는 키가 170cm 인 친구와 180cm 인 친구 둘만 남았습니다. 둘 중에 170cm 친구가 더 작기 때문에 이 친구를 먼저 세우고, 그 다음 180cm 인 친구를 마지막에 세웁니다.
150cm, 160cm, 170cm (150cm, 160cm 빼고 남은 2명 중 제일 작음), 180cm (키기 가장 큼)
위에서 설명 정렬 방식을 일반해보면 다음과 같이 정리할 수 있습니다.
Index Value 0 모든 값 중에서 가장 작은 값 1 첫번째 값(Index=0)을 제외하고 남은 값 중에서 가장 작은 값 … … i i번째 부터 n-1 번째까지 값 중 가장 작은 값 … … n-2 n-2번째와 n-1 번째까지 값 중 가장 작은 값 n-1 마지막에 남은 하나의 값 (비교 대상 없음)
즉, 크기 n의 배열이 주어졌을 때, index 0부터 n-1까지의 모든 index i에 대해서, i번째 부터 n-1 번째까지 값 중 가장 작은 값을 구해서 index i에 놓으면 정렬된 배열을 얻을 수가 있습니다. 모든 index에 대해서 그 index에 위치시킬 값을 “선택”하기 때문에 이 정렬 알고리즘을 “선택 정렬”또는 “Selection Sort”이라고 부릅니다.
실전 예제
아래와 같이 1 부터 5 까지 총 5개의 숫자가 들어있는 배열을 위에서 설명한 선택 정렬 알고리즘을 이용하여 정렬을 해보겠습니다. i는 현재 index, m은 가장 작은 값이 있는 index를 가르킵니다.
i [ 3 , 4 , 5 , 1 , 2 ] m
우선 index 0에 놓을 값을 찾아야 합니다. 모든 숫자 중 가장 작은 숫자인 1 을 index 3에서 찾았습니다. 1 을 index 0에 위치시키기 위해서 위해서 원래 index 0에 있던 3 과 1 의 자리를 바꿉니다.
i [ 1 , 4 , 5 , 3 , 2 ] m
다음으로 index 1에 놓을 값을 찾아야 합니다. 1 을 제외하고 남은 숫자 중에서 가장 작은 숫자인 2 를 index 4에서 찾았습니다. 2 를 index 1에 위치시키기 위해서 원래 index 1에 있던 4 와 2 의 자리를 바꿉니다.
i [ 1 , 2 , 5 , 3 , 4 ] m
다음으로 index 2에 놓을 값을 찾아야 합니다. 1 , 2 를 제외하고 남은 숫자 중에서 가장 작은 숫자인 3 를 index 3에서 찾았습니다. 3 를 index 2에 위치시키기 위해서 원래 index 2에 있던 5 와 3 의 자리를 바꿉니다.
i [ 1 , 2 , 3 , 5 , 4 ] m
다음으로 index 3에 놓을 값을 찾아야 합니다. 1 , 2 , 3 를 제외하고 남은 숫자 중에서 가장 작은 숫자인 4 를 index 4에서 찾았습니다. 4 를 index 3에 위치시키기 위해서 원래 index 3에 있던 5 와 4 의 자리를 바꿉니다.
i [ 1 , 2 , 3 , 4 , 5 ] m
마지막으로 index 4에 놓을 값을 찾아야 합니다. 1 , 2 , 3 , 4 를 제외한 남은 숫자는 5 밖에 없으며 따라서 지동으로 5 가 가장 작은 숫자가 됩니다.
복잡도 분석
선택 정렬은 별도의 추가 공간을 사용하지 않고 주어진 배열이 차지하고 있는 공간 내에서 값들의 위치만 바꾸기 때문에 O(1) 의 공간 복잡도를 가집니다.
의 공간 복잡도를 가집니다. 시간 복잡도는 우선 루프문을 통해 모든 인덱스에 접근해야 하기 때문에 기본적으로 O(N) 을 시간을 소모하며, 하나의 루프에서는 현재 인덱스의 값과 다른 인덱스의 값들과 비교하여 최소값을 찾은 후 현재 인덱스에 있는 값과 상호 자리 교대를(swap)해야 해야하기 때문에 O(N) 을 시간이 필요하게 됩니다. 따라서 선택 정렬은 총 O(N^2) 의 시간 복잡도를 가지는 정렬 알고리즘입니다.
알고리즘 특징
선택 정렬은 정렬된 값을 배열의 맨 앞부터 하나씩 채워나가게 됩니다. 따라서, 뒤에 있는 index로 갈수록 비교 범위가 하나씩 점점 줄어드는 특성을 가지고 있습니다. (index 0에서는 0부터 n-1까지 비교해야 되지만, index n-1에서는 남은 숫자가 하나 밖어서 비교가 필요 없음)
입력 배열이 이미 정렬되어 있건 말건 관계없이 동일한 연산량을 가지고 있기 때문에 최적화 여자가 적어서 다른 O(N^2) 대비해도 성능이 떨어지는 편입니다.
대비해도 성능이 떨어지는 편입니다. 이러한 성능 상의 한계 때문에 실전에서는 거의 보기 힘들지만, 가장 구현이 쉬운 정렬 알고리즘이라서, 알고리즘 수업 시간에는 한 번씩 꼭 접하게 되는 유명한 정렬 알고리즘입니다.
구현
두 개의 반복문이 필요합니다. 내부 반복문에서는 현재 index부터 마지막 index까지 최소값의 index를 찾아내고, 외부 반복문에서는 이 최소값의 index와 현재 index에 있는 값을 상호 교대(swap)합니다. 외부 반복문에서는 index i 를 0 에서 n-2 (또는 n-1 . 마지막 index에서는 남는 값이 하나 밖에 없기 때문에 대세에 지장 없음)까지 진행시키며, 내부 반복문에서 이미 정렬된 값들에서는 관심이 없기 때문에 index j 를 i 에서 n-1 까지 진행시킵니다. 각 index에 대해서 최소값을 찾기 위해 대소 비교는 여러번 일어나나 상호 교대(swap)은 딱 한번만 알어납니다.
Python 코드
def selection_sort ( arr ) : for i in range ( len ( arr ) – 1 ) : min_idx = i for j in range ( i + 1 , len ( arr ) ) : if arr [ j ] < arr [ min_idx ] : min_idx = j arr [ i ] , arr [ min_idx ] = arr [ min_idx ] , arr [ i ] Java 코드 public class Selection { public static void sort ( int [ ] arr ) { for ( int i = 0 ; i < arr . length - 1 ; i ++ ) { int minIdx = i ; for ( int j = i + 1 ; j < arr . length ; j ++ ) { if ( arr [ j ] < arr [ minIdx ] ) minIdx = j ; } swap ( arr , i , minIdx ) ; } } private static void swap ( int [ ] arr , int a , int b ) { int tmp = arr [ a ] ; arr [ a ] = arr [ b ] ; arr [ b ] = tmp ; } } 마치면서 정렬 알고리즘의 가장 기본이라고 할 수 있는 선택 정렬에 대해서 알아보았습니다. 앞으로 다른 정렬 알고리즘에 대해서도 포스팅하도록 하겠습니다.
모두의 알고리즘 with 파이썬: 08 선택 정렬
8선택 정렬
◼︎ 8-1 선택 정렬 과정
일반적인 선택 정렬은 처리할 대상 범위에서 최솟값을 찾아 그 값과 범위의 맨 앞에 있는 값을 서로 바꾸는 과정을 반복합니다. 이 과정이 한 번 끝날 때마다 범위 안의 맨 앞에 있는 값은 정렬이 끝난 것이므로 정렬 대상 범위에서 제외합니다.
이해를 돕기 위해 이미 정렬이 끝난 부분과 앞으로 처리될 대상 범위 사이에 세로 선(|)을 넣어 구분하였습니다.
| 2 4 5 1 3 ← 시작, 전체 리스트인 2, 4, 5, 1, 3을 대상으로 최솟값을 찾습니다.
| 1 4 5 2 3 ← 최솟값 1을 대상의 가장 왼쪽 값인 2와 바꿉니다.
1 | 4 5 2 3 ← 1을 대상에서 제외하고 4, 5, 2, 3에서 최솟값을 찾습니다.
1 | 2 5 4 3 ← 4, 5, 2, 3 중 최솟값인 2를 4와 바꿉니다.
1 2 | 5 4 3 ← 2를 대상에서 제외하고 5, 4, 3에서 최솟값을 찾습니다.
1 2 | 3 4 5 ← 5, 4, 3 중 최솟값인 3을 5와 바꿉니다.
1 2 3 | 4 5 ← 3을 대상에서 제외하고 4, 5에서 최솟값을 찾습니다.
1 2 3 | 4 5 ← 최솟값 4를 4와 바꿉니다(변화 없음).
1 2 3 4 | 5 ← 4를 대상에서 제외합니다. 자료가 5 하나만 남았으므로 종료합니다.
1 2 3 4 5 | ← 최종 결과
[Python] 선택 정렬(Selection Sort) 사용하기
728×90
반응형
이번에는 여러 정렬 기법 중 선택 정렬(Selection Sort)을 파이썬 코드로 구현해 보겠습니다.
먼저, 선택 정렬은 배열에 있는 값들 중 최솟값을 탐색한 후에 정렬을 하는 알고리즘입니다. 이번 글에서는 정렬에 대한 자세한 설명보다는 코드 위주로 보겠습니다.
# 정렬할 배열 arr = [64, 25, 12, 22, 11]
위 코드와 같이 정렬을 진행할 배열을 선언합니다.
# 배열의 길이만큼 반복문 실행 for i in range(len(arr)):
그 후 위 코드처럼 배열의 길이만큼 반복문을 실행하여 최솟값을 구하고 정렬을 진행을 합니다.
728×90
# 정렬할 배열 arr = [64, 25, 12, 22, 11] # 배열의 길이만큼 반복문 실행 for i in range(len(arr)): # 가장 작은 값을 저장할 변수에 i를 초기화 min_idx = i for j in range(i + 1, len(arr)): # 만약 가장 작은 값변수가 다음 인덱스의 값보다 클경우 if arr[min_idx] > arr[j]: min_idx = j # 값을 변경 # 값을 변경 arr[i], arr[min_idx] = arr[min_idx], arr[i] # 정렬한 배열을 출력 print(“[Sorted array]”) for i in range(len(arr)): print(“%d ” %arr[i], end = “”)
위 코드는 선택 정렬의 전체 코드로 오름차순 정렬입니다. 여러분들은 위 코드를 참고하여 내림차순 선택 정렬로 프로그램을 짜 보는 건 어떤가요?
마지막으로 해당 코드의 결과 사진입니다.
728×90
반응형
[알고리즘/Algorithm] 파이썬으로 선택 정렬(Selection Sort) 알아보기
Selection Sort (선택 정렬)
다음과 같은 순서를 반복하며 정렬하는 알고리즘
주어진 데이터 중, 최소값을 찾는다. 해당 최소값을 데이터 맨 앞에 위치한 값과 교체한다. 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복한다.
선택 정렬 흐름
그림과 같이 한 루프마다 제일 작은 값을 찾아 왼쪽부터 차례차례 스왑하며 정렬해준다.
개인적으로 기본 정렬 3개(버블 정렬, 선택 정렬, 삽입 정렬)중 제일 직관적인 정렬 알고리즘이라고 생각이 들었다.
선택 정렬을 파이썬으로 구현하며 아래와 같이 구현할 수 있다.
def selection_sort(target): # 10개의 데이터가 있는 리스트는 최대 9번의 정렬이면 정렬됨 # 따라서 i는 range는 len – 1 for i in range(len(target) – 1): # 제일 작은 값을 갖는 데이터의 index를 나타냄 min_index = i # min_index의 값보다 작은 것이 있으면 반복하면서 할당해줌 for j in range(i+1, len(target)): if target[min_index] > target[j]: min_index = j target[min_index], target[i] = target[i], target[min_index]
바깥 for문은 마지막 값을 비교할 필요는 없으니 타겟 리스트의 -1 까지만 반복해주고
안쪽 for문을 통해 작은 값이 나올 때마다 재차 min_index에 index를 할당해주어 바깥 for문이 끝나면
target[min_index]와 target[i]를 스왑해주면서 정렬을 하였다.
시간 복잡도
정렬의 여부와 상관없이 안쪽 for문을 통해 항상 값을 비교하기 때문에 O(N^2)이 된다.
[알고리즘] 선택 정렬에 대해 알아보자! (+Python 구현)
728×90
반응형
본 포스팅에서는 선택 정렬(selection sort) 알고리즘에 대해 알아봅니다.
📚 목차
1. 선택 정렬이란?
2. 선택 정렬의 동작 과정
3. 선택 정렬 구현(Python)
4. 선택 정렬의 시간 복잡도
1. 선택 정렬이란?
선택 정렬은 여러 개의 데이터가 무작위로 있을 때 전체 데이터에서 매번 가장 작은(또는 가장 큰) 데이터를 선택하여 데이터 간의 위치를 변경하는 과정을 반복하여 데이터를 오름차순(또는 내림차순)으로 정렬할 때 사용합니다. 선택 정렬의 종류는 2가지로 나눌 수 있습니다.
최소 선택 정렬(Min-selection sort) : 매번 가장 작은 데이터를 선택하고 데이터 간의 배치를 변경하며 오름차순으로 정렬
최대 선택 정렬(Max-selection sort): 매번 가장 큰 데이터를 선택하고 데이터 간의 배치를 변경하며 내림차순으로 정렬
2. 선택 정렬의 동작 과정
최소 선택 정렬의 경우 구체적인 동작 과정은 다음과 같습니다.
1️⃣ 전체 데이터에서 가장 작은 데이터를 선택하고 맨 앞에 있는 데이터와 자리를 바꿉니다.
2️⃣ 그다음으로 작은 데이터를 선택하고 맨 앞에서 두 번째 데이터와 자리를 바꿉니다.
3️⃣ 위와 같은 방식으로 오름차순으로 정렬이 완료될 때까지 데이터를 선택하고 자리를 바꾸는 과정을 반복합니다.
이제 예시와 함께 선택 정렬의 구체적인 동작 과정을 알아보도록 하겠습니다. 그림 1 과 같이 정렬 없이 정수 10개가 무작위로 배치되어 있을 때 선택 정렬을 활용해서 오름차순으로 정렬해 보도록 하겠습니다.
그림 1. 정렬되지 않고 무작위로 나열된 0부터 9까지 10개의 정수
편의상 정렬되지 않은 데이터 중에서 가장 작은 값을 파란색으로, 정렬된 데이터는 회색으로 표현하겠습니다. 추가로 가장 작은 값과 자리를 변경할 데이터를 파란색 화살표로 표시하겠습니다.
(1) 정렬되지 않은 데이터에서 가장 작은 값인 0을 선택하고 맨 앞에 있는 값인 8과 자리를 바꿉니다.
(2) 정렬되지 않은(회색 제외) 데이터에서 가장 작은 값인 1을 선택하고 맨 앞에 있는 값인 3과 자리를 바꿉니다.
(3) 정렬되지 않은(회색 제외) 데이터에서 가장 작은 값인 2를 선택하고 맨 앞에 있는 값인 8과 자리를 바꿉니다.
(4) 정렬되지 않은(회색 제외) 데이터에서 가장 작은 값인 3을 선택하고 맨 앞에 있는 값인 9와 자리를 바꿉니다.
(5) 정렬되지 않은(회색 제외) 데이터에서 가장 작은 값인 4를 선택하고 맨 앞에 있는 값인 9와 자리를 바꿉니다.
(6) 정렬되지 않은(회색 제외) 데이터에서 가장 작은 값인 5를 선택하고 맨 앞에 있는 값인 6과 자리를 바꿉니다.
(7) 정렬되지 않은(회색 제외) 데이터에서 가장 작은 값인 6을 선택하고 맨 앞에 있는 값인 8과 자리를 바꿉니다.
(8) 정렬되지 않은(회색 제외) 데이터에서 가장 작은 값인 7을 선택하고 맨 앞에 있는 값인 9와 자리를 바꿉니다.
(9) 정렬되지 않은(회색 제외) 데이터에서 가장 작은 값인 8을 선택하고 맨 앞에 있는 값인 9와 자리를 바꿉니다.
마지막 (9) 과정을 거치면 전체 데이터가 오름차순으로 정렬됩니다. 이처럼 데이터 N개가 주어졌을 때 가장 작은 데이터를 N-1번 앞으로 보내는 과정을 통해 정렬을 완료할 수 있습니다.
3. 선택 정렬 구현(Python)
arr = [8, 3, 0, 9, 1, 6, 2, 4, 7, 5] n = len(arr) for i in range(n): # 가장 작은 데이터의 인덱스 min_idx = i for j in range(i+1, n): # 최솟값 찾기 if (arr[min_idx] > arr[j]): min_idx = j # 데이터 간의 자리 변경 arr[i], arr[min_idx] = arr[min_idx], arr[i] print(arr)
앞서 살펴본 예시를 파이썬을 통해 구현한 소스코드는 위와 같습니다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]위와 같이 10개의 정수가 오름차순으로 정렬되어 출력되는 것을 확인하실 수 있습니다.
4. 선택 정렬의 시간 복잡도
선택 정렬의 시간 복잡도를 계산하면 다음과 같습니다. 앞서 살펴본 것처럼 N개의 데이터가 있을 때 N-1번만큼 가장 작은 데이터를 찾고 맨 앞으로 보내는 과정이 필요합니다. 구현 방식에 따라 미세한 차이가 있을 수 있지만, 앞서 예시로 활용한 그림처럼 구현하게 되면 총 연산 횟수는 아래 수식 1 만큼 필요합니다.
수식 1. 선택 정렬 구현 시 필요한 총 연산 횟수
이를 근사치로 계산하면 수식 2 와 다음과 같습니다.
수식 2. 선택 정렬 구현 시 필요한 총 연산 횟수의 근사치
수식 2 는 빅오 표기법으로 간략하게 O(N^2) 으로 표기할 수 있습니다. 이는 위에서 선택 정렬을 구현할 때 이중 반복문을 활용했기 때문에 시간 복잡도가 O(N^2) 라는 것을 직관적으로 이해할 수 있습니다. 이와 같이 선택 정렬은 데이터의 개수가 100배 늘어나면 이론적으로 수행 시간이 10,000배 늘어납니다. 즉, 데이터 개수가 10,000개 이상이면 정렬 속도가 매우 느려질 만큼, 선택 정렬은 시간 복잡도 측면에서 퀵 정렬과 같은 다른 정렬 방법이나 파이썬 내장 라이브러리를 활용한 정렬 방식과 비교했을 때 비효율적입니다.
📚 참고할 만한 포스팅
포스팅 내용에 오류가 있을 경우 댓글 남겨주시면 감사드리겠습니다.
그럼 오늘도 즐거운 하루 보내시길 바랍니다 🙂
고맙습니다.
728×90
반응형
[Algorithm] (이코테) 선택 정렬 – 파이썬
교재 : 이것이 코딩 테스트다 with 파이썬
CHAPTER 6 정렬
실전문제 6-1 선택 정렬 156p
선택 정렬 기본예제
문제
가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음으로 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정 반복하는 선택 정렬(Selection Sort)을 진행하자
제시된 데이터 : 7, 5, 9, 0, 3, 1, 6, 2, 4, 8
접근
처음에는 min_idx가 아니고 min을 value로 저장했는데 그렇게하니까 나중에 swap을 할 수 가 없어서 바꾸어주었다. 그렇게 했더니 책에 제시된 정답이랑 같은 코드를 낼 수 있었당~! 왕
노트
arr = [ 3 , 5 ] arr [ 0 ] , arr [ 1 ] = arr [ 1 ] , arr [ 0 ]
풀이
array = [ 7 , 5 , 9 , 0 , 3 , 1 , 6 , 2 , 4 , 8 ] for i in range ( len ( array ) ) : min_idx = i for j in range ( i + 1 , len ( array ) ) : if array [ min_idx ] > array [ j ] : min_idx = j array [ i ] , array [ min_idx ] = array [ min_idx ] , array [ i ] print ( array )
선택 정렬 시간 복잡도 : O(N^2)
알고리즘 풀이에 사용하기엔 너무 느리다.
References
이것이 코딩 테스트다 with 파이썬 – 나동빈 저
[정렬 알고리즘] 파이썬 선택 정렬 구현
선택 정렬(Selection Sort)
전개
주어진 배열에서 최솟값을 찾는다. 그 값을 맨 앞의 값과 교체한다. 맨 처음 위치를 뺀 나머지 배열을 같은 방법으로 교체한다. 마지막 차례에서는 다음에 비교할 값이 없으므로 그 전에 반복문을 미리 끝낸다.
시간 복잡도
O( N 2 {N^2} N 2 )
구현 코드
def selection_sort ( numbers ) : “””오름차순 선택 정렬을 실행합니다.””” n = len ( numbers ) for i in range ( 0 , n – 1 ) : min_idx = i for j in range ( i + 1 , n ) : if numbers [ j ] < numbers [ min_idx ] : min_idx = j numbers [ i ] , numbers [ min_idx ] = numbers [ min_idx ] , numbers [ i ] if __name__ == '__main__' : numbers = [ 6 , 5 , 6 , 4 , 3 , 2 , 1 ] selection_sort ( numbers ) print ( numbers ) ''' 출력 결과 [1, 2, 3, 4, 5, 6, 6] ''' Ref
Selection Sort
1. 단순 선택법 개념 이해하기
단순 선택법은 졍렬되어 있지 않은 데이터 중 가장 작은 데이터를 선택하여 맨 앞부터 순서대로 정렬해 나가는 알고리즘으로써 ‘선택 정렬(Selection sort)’ 라고도 한다.
예를 들어 아래의 표 처럼 5개의 배열(array)에 [12, 13, 11, 14, 10] 이 있다고 해보자.
위의 배열을 선택 정렬 알고리즘을 이용하여 오름차순으로 정렬해보자.
선택 정렬 알고리즘은
먼저, 가장 작은 숫자를 찾는다.
그런 다음 가장 작은 숫자를 첫 번째 index의 공과 위치를 바꿔 준다.
위의 두 가지 동작을 반복하면서 모든 숫자가 정렬될 때까지 반복하는 알고리즘이다. 다음 그림을 통해 선택 정렬 알고리즘을 알아보도록 하자.
위의 그림 처럼 해당 단계마다 가장 작은 숫자를 찾아 정렬이 되지 않은 index의 위치와 숫자를 바꿔주면 된다.
2. 단순 선택법 알고리즘
단순 선택법(선택 정렬)은 다음과 같이 두 가지 절차로 구성되어 있다.
1) 탐색 범위의 최소값을 찾는 처리
2) 탐색 범위의 최소값을 맨 앞의 요소와 교환하는 처리
1) 배열에서 최소값 찾기
배열에서 최소값을 찾는 방법은 배열의 길이만큼(length) 순환하면서 각 데이터를 차례대로 2개씩 비교하면 된다. 여기서는 최소값이아닌 최소값의 위치 즉, index를 찾아야 한다.
2) 최소값의 위치를 교환하는 처리
이제 최소값의 위치를 찾았으므로, 이 최소값을 위의 그림처럼 맨 앞의 index와 위치를 교환해주는 처리가 필요하다.
3. 단순 선택법을 순서도로 나타내기
위의 2번에서의 1), 2) 과정을 일반화 하여 순서도로 나타내 보자.
Start i = 0 i < len(array)-1 min_index = i k = i+1 k < len(array) array[k] < array[min_index] min_index = k k = k + 1 tmp = array[i] array[i] = array[min_index] array[min_index] = tmp i = i + 1 print array end yes no yes no yes no 4. 의사코드로 나타내기 이제 파이썬 코드로 구현하기에 앞서, 의사코드를 알아보도록 하자. input: array let i = 0 for i in length(array)-1: min_index = i for k in (i+1 to length(array)): if array[k] < array[min_index]: min_index = k tmp = array[i] array[i] = array[min_index] array[min_index] = tmp 5. 파이썬 코드로 구현하기 아래의 코드는 선택 정렬 알고리즘을 파이썬 코드로 구현한 것이다. def selection_sort ( arr ): for i in range ( len ( arr ) - 1 ): min_index = i for k in range ( i + 1 , len ( arr )): if arr [ k ] < arr [ min_index ]: min_index = k tmp = arr [ i ] arr [ i ] = arr [ min_index ] arr [ min_index ] = tmp return arr test = [ 12 , 13 , 11 , 14 , 10 ] print ( selection_sort ( test )) ''' >>> [10, 11, 12, 13, 14]
”’
2.4 선택 정렬(Selection Sort) 알고리즘
이번에는 반복 알고리즘을 이용하는 선택 정렬 알고리즘을 알아봅시다.
선택 정렬 알고리즘은 제일 큰 값을 찾아 맨 뒤의 요소와 교체하는 방법을 반복하여 전체를 정렬하는 알고리즘입니다. 물론 제일 작은 값을 찾아 맨 앞의 요소와 교체하는 방법을 반복할 수도 있습니다.
선택 정렬 알고리즘을 의사코드(pseudo code: 논리적인 수행 흐름을 이해할 수 있게 작성한 코드)는 다음과 같습니다.
선택 정렬(base:컬렉션,n:원소 개수,compare:비교 논리) 반복(i:=n; i>1 ; i:= i-1) 반복(max=0,j:=1; j
[알고리즘][정렬] ② 삽입 정렬 (Insertion Sort) – Python
2021.07.10 – [알고리즘(Algorithm)] – [알고리즘][정렬] ① 선택 정렬 (Selection Sort) – Python
이전 글에서는 선택정렬(Selection Sort)에 대해서 알아보았습니다. 선택정렬은 가장 원시적인 방법으로 복잡도가 O(N²)에 해당하여 데이터가 늘어날수록 느려지는 단점이 있었습니다.
이번 글에서는 선택정렬처럼 직관적으로 이해하기 쉬우면서 좀 더 효율적인 알고리즘인 삽입정렬에 대해서 알아보도록 하겠습니다.
1. 삽입 정렬(Insertion Sort)
1.1 삽입 정렬의 원리
– 삽입정렬은 요약하자면 ‘데이터를 하나씩 확인하면서, 각 데이터를 적절한 위치에 삽입 하는 방법 ‘ 입니다. 적절한 위치에 삽입한다는 의미에서 ‘삽입 정렬(Insertion Sort)’ 이라고 부릅니다.
– 선택정렬처럼 동작을 직관적으로 이해하기 쉽지만, 선택정렬보다는 구현 난이도가 높고 실행시간 면에서 더 효율적 입니다.
<그림으로 설명하는 삽입정렬1>
[나무위키] 정렬 알고리즘1) 삽입정렬은 이미 정렬된 영역(검은 Box)과, 아직 정렬되지 않은 영역(그 오른쪽 숫자들)로 나뉩 니다.
2) 정렬은 두번째 요소부터 자신의 왼쪽(첫번째 요소)와 비교해 나가며(한칸 씩 왼쪽으로 이동), 자신보다 작은 숫자를 찾는 순간 그 뒤에 자신을 삽입 합니다.
<그림으로 설명하는 삽입정렬 2>
[위키백과] 삽입정렬(a) New_Face는 두번째 요소(‘7)부터 시작한다.
: New_Face는 앞에 있는 숫자와 비교하면서 작은 숫자를 만나면 멈춘다
: New_Face(7)은, 자기보다 작은 숫자(3)를 시작하자마자 만나서 작업끝
(b) 다음 New_Face인 숫자 ‘2’는 자기보다 작은 숫자를 못만나서 맨앞까지 이동
(c) 다음 New_Face 숫자 ‘5’는 자기보다 작은 숫자인 ‘3’을 만나서 그 뒤에 삽입
(d) 다음 New_Face 숫자 ‘1’은 자기보다 작은 숫자가 없으므로 맨앞까지 한칸씩 이동
(d) 다음 New_Face 숫자 ‘4’는 자기보다 작은 숫자 ‘3’을 만나서 그 뒤에 삽입
(f) 마지막 요소인 4까지 New_Face 처리 작업 종료했으므로, 정렬 최종 완성
1.2 삽입 정렬 파이썬 코드
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(1, len(array)): for j in range(i, 0, -1): if array[j] < array[j-1]: array[j], array[j-1] = array[j-1], array[j] else: break print(array) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 1.3 시간복잡도 - 삽입정렬의 시간복잡도 는 O(N²) 로, 앞 글에서 배운 선택정렬과 비슷한 시간이 소요된다. - 하지만, 삽입정렬은 데이터가 정렬이 되어있는 경우 매우 빠르게 동작 하며, 가장 빠른 경우 O(N)의 복잡도를 가진다. - 이어서 배울 퀵 정렬 알고리즘과 비교했을 때에도, 일반적으로 퀵정렬이 효율적이나 데이터가 정렬되어있을 경우 삽입정렬이 더 효율적이다. - 다음 글에서는 퀵 정렬(Quick Sort)에 대해서 알아보도록 하겠습니다. 2021.07.11 - [알고리즘(Algorithm)] - [알고리즘][정렬] ③ 퀵 정렬 (Quick Sort) - Python <참고> ‘이것이 코딩 테스트다 with 파이썬’
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791162243077
키워드에 대한 정보 선택 정렬 파이썬
다음은 Bing에서 선택 정렬 파이썬 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 셀렉션소트 선택정렬 5분만에 이해하기 – Gunny
- 셀렉션
- 소트
- 셀렉션 소트
- 선택
- 정렬
- 선택정렬
- 알고리즘
- 정렬 알고리즘
- 소팅
- 소팅 알고리즘
- 탐색
- 거니
- 자료구조
- C언어
- 고지식
- 알고투게더
- 알고리즘 투게더
- Gunny
- Java
- ALgorithm
- Selection Sort
- Selection
- Sort
- Sorting Algorithm
- Coding in C
- coding in java
- data structure
- selection algorithm explanation
- algorithm explanation
셀렉션소트 #선택정렬 #5분만에 #이해하기 #- #Gunny
YouTube에서 선택 정렬 파이썬 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 셀렉션소트 선택정렬 5분만에 이해하기 – Gunny | 선택 정렬 파이썬, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.