Algorithm - (2) 선택 정렬
선택 정렬
선택 정렬 : 최소값을 선택한다! 해서 선택정렬
- 선택 정렬 알고리즘
- 주어진 데이터에서 최소 값을 찾음
- 해당 최소값을 데이터 맨 앞에 위치한 값과 교체
- 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복
코드 디자인
데이터 앞쪽 부터 정렬
매번 반복문을 실행할때마다 이전 반복문에서의 첫번째 인덱스값을 제외하고 정렬함
turn : 전체 데이터 리스트에 대한 swapping비교하는 turn (전체 데이터를 총 조건체크하는 한 번의 로테이션)
-
데이터가 두 개일 때 선택 정렬
(3 2)
(2 3)비교데이터 인덱스 비교 시작 데이터 비교 끝 데이터 0 1 1 -
데이터가 세 개일 때 선택 정렬
(3 4 2)
(2 4 3)
(2 3 4)비교데이터 인덱스 비교 시작 데이터 비교 끝 데이터 0 1 2 1 2 2 -
데이터가 네 개일 때 선택 정렬
(4 5 3 2)
(2 5 3 4)
(2 3 5 4)
(2 3 4 5)비교데이터 인덱스 비교 시작 데이터 비교 끝 데이터 0 1 3 1 2 3 2 3 3
선택 정렬 알고리즘 (Pseudocode)
for(int standard = 0; standard < 데이터길이 - 1; ++standard) //turn
{
int lowest = standard;
for(int index = standard+1; index < 데이터길이 ; ++index)
if(data[lowest] > data[index])
lowest = index;
swapping data[lowest] and data[standard]
}
- for standard in range(len(data_list) - 1) 로 반복
- lowest = standard 로 놓고,
- for index in range(standard, len(data_list)) standard 이후부터 반복
- 내부 반복문 안에서 data_list[lowest] > data_list[index] 이면,
- lowest = index
- 내부 반복문 안에서 data_list[lowest] > data_list[index] 이면,
- swapping two data
- data_list[index], data_list[lowest] = data_list[lowest], data_list[num]
알고리즘 시간복잡도
반복문이 두 개 : $O(n^2)$
C++ 코드 구현
#include<iostream>
using namespace std;
void selectionSort(int * data, int size)
{
for(int standard = 0; standard < size-1 ; ++standard) //turn
{
int lowest = standard;
for(int index = standard+1; index < size; ++index)
{
if(data[lowest] > data[index])
lowest = index;
}
int temp = data[lowest];
data[lowest] = data[standard];
data[standard] = temp;
}
}
int main()
{
int list_s[] = {4,5,3,2,1};
int len = sizeof(list_s) / sizeof(list_s[0]);
cout << len << endl;
for(int i = 0; i < len; ++i)
cout << list_s[i] << endl;
selectionSort(list_s, len);
for(int i = 0; i < len; ++i)
cout << list_s[i] << endl;
return 0;
}
Python 코드 구현
def selection_sort(data):
for standard in range(len(data) - 1):
lowest = standard
for index in range(standard + 1, len(data)):
if data[lowest] > data[index]:
lowest = index
data[lowest], data[standard] = data[standard], data[lowest]
return data