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